定义内核模块快速打包的宏,用于内核ko的一键式打包
This commit is contained in:
parent
81bbb89f94
commit
14b267b6d3
@ -12,11 +12,13 @@ Source2: rpmrc
|
||||
Source3: macros
|
||||
Source4: config.guess
|
||||
Source5: config.sub
|
||||
Source6: kmodtool.py
|
||||
|
||||
Source10: macros.perl
|
||||
Source11: macros.python
|
||||
Source12: macros.go
|
||||
Source13: macros.forge
|
||||
Source14: macros.kmp
|
||||
|
||||
Source20: openEuler-hardened-cc1
|
||||
Source21: openEuler-hardened-ld
|
||||
@ -37,7 +39,6 @@ Provides: perl-srpm-macros
|
||||
Provides: rust-srpm-macros
|
||||
Provides: go-srpm-macros
|
||||
Provides: kernel-rpm-macros
|
||||
Obsoletes: kernel-rpm-macros
|
||||
Obsoletes: python-rpm-macros
|
||||
Obsoletes: python2-rpm-macros
|
||||
Obsoletes: python3-rpm-macros
|
||||
@ -76,6 +77,12 @@ Provides: system-rpm-config = %{version}-%{release}
|
||||
%description
|
||||
specific rpm configuration files for %{vendor}.
|
||||
|
||||
%package -n kernel-rpm-macros
|
||||
Summary: Macros and scripts for building kernel module packages
|
||||
|
||||
%description -n kernel-rpm-macros
|
||||
Macros and scripts for building kernel module packages.
|
||||
|
||||
%prep
|
||||
%setup -c -T
|
||||
cp -p %{sources} .
|
||||
@ -86,9 +93,10 @@ install -p -m 644 -t %{buildroot}%{rpmvdir} macros rpmrc
|
||||
install -p -m 755 -t %{buildroot}%{rpmvdir} config.*
|
||||
install -p -m 755 -t %{buildroot}%{rpmvdir} brp-*
|
||||
install -p -m 644 -t %{buildroot}%{rpmvdir} openEuler-*
|
||||
install -p -m 755 -t %{buildroot}%{rpmvdir} kmodtool.py
|
||||
|
||||
mkdir -p %{buildroot}%{_rpmconfigdir}/macros.d
|
||||
install -p -m 644 -t %{buildroot}%{_rpmconfigdir}/macros.d/ %{SOURCE10} %{SOURCE11} %{SOURCE12} %{SOURCE13}
|
||||
install -p -m 644 -t %{buildroot}%{_rpmconfigdir}/macros.d/ %{SOURCE10} %{SOURCE11} %{SOURCE12} %{SOURCE13} %{SOURCE14}
|
||||
|
||||
mkdir -p %{buildroot}%{_fileattrsdir}
|
||||
|
||||
@ -103,7 +111,14 @@ mkdir -p %{buildroot}%{_fileattrsdir}
|
||||
%{_rpmconfigdir}/macros.d/
|
||||
%{_rpmconfigdir}/macros.d/*
|
||||
|
||||
%files -n kernel-rpm-macros
|
||||
%{rpmvdir}/kmodtool.py
|
||||
%{_rpmconfigdir}/macros.d/macros.kmp
|
||||
|
||||
%changelog
|
||||
* Wed June 19 2020 zhangliuyan <zhangliuyan@huawei.com> - 30-11
|
||||
- add kmodtool.py macros.kmp
|
||||
|
||||
* Wed May 6 2020 openEuler Buildteam <buildteam@openeuler.org> - 30-10
|
||||
- Type:enhancement
|
||||
- ID:NA
|
||||
|
||||
83
kmodtool.py
Normal file
83
kmodtool.py
Normal file
@ -0,0 +1,83 @@
|
||||
# -*- coding: UTF-8 -*-
|
||||
#!/usr/bin/python3
|
||||
|
||||
# kmodtool - Helper script for building kernel module RPMs
|
||||
|
||||
import os,subprocess,sys
|
||||
|
||||
def print_verrel ():
|
||||
#verrel=subprocess.getoutput("(rpm -q --qf '%{VERSION}-%{RELEASE}' `rpm -q kernel-devel` | head -n 1)")
|
||||
# if (len(verrel)== 0):
|
||||
verrel=subprocess.getoutput("uname -r")
|
||||
return verrel
|
||||
|
||||
def print_rpmtemplate():
|
||||
kmod_name = sys.argv[2]
|
||||
# verrel=subprocess.getoutput("(rpm -q --qf '%{VERSION}-%{RELEASE}' `rpm -q kernel-devel` | head -n 1)")
|
||||
# if (len(verrel)== 0):
|
||||
verrel=subprocess.getoutput("uname -r")
|
||||
|
||||
if not kmod_name:
|
||||
print("Please provide the kmodule-name as first parameter.")
|
||||
exit()
|
||||
get_rpmtemplate(kmod_name,verrel)
|
||||
|
||||
|
||||
def get_rpmtemplate(kmod_name,verrel):
|
||||
print("%package -n kmod-" + kmod_name)
|
||||
print("Summary: " + kmod_name + " " + "kernel module(s)")
|
||||
print("Group: System Environment/Kernel")
|
||||
if "%{version}":
|
||||
print("Version: %{version}")
|
||||
if "%{release}":
|
||||
print("Release: %{release}")
|
||||
print("Provides: kernel-modules =" + " " + verrel)
|
||||
print("Provides: "+ kmod_name + "-kmod = %{?epoch:%{epoch}:}%{version}-%{release}")
|
||||
print("Requires(post): /usr/sbin/depmod")
|
||||
print("Requires(postun): /usr/sbin/depmod")
|
||||
print("%description -n kmod-" + kmod_name)
|
||||
print("This package provides the " + kmod_name + " kernel modules built for the Linux")
|
||||
print("kernel "+ verrel + " for the %{_target_cpu} family of processors.")
|
||||
print("%post -n kmod-" + kmod_name)
|
||||
print("if [ -e /boot/System.map-" + verrel + "]; then")
|
||||
print(" /sbin/depmod -aeF /boot/System.map-" + verrel +" " + verrel +"> /dev/null || :")
|
||||
print("fi")
|
||||
if (kmp !=""):
|
||||
print("modules=( $(find /lib/modules/" + verrel + "/extra/" + kmod_name + ") )")
|
||||
print("""if [ -x "/sbin/weak-modules" ]; then
|
||||
printf '%s\\n' "${modules[@]}" | /sbin/weak-modules --add-modules
|
||||
fi""")
|
||||
print("%preun -n kmod-" + kmod_name)
|
||||
print("rpm -ql kmod-" + kmod_name + "| grep '\.ko$' > /var/run/rpm-kmod-" + kmod_name +"-modules")
|
||||
|
||||
print("%postun -n kmod-" + kmod_name)
|
||||
print("/sbin/depmod -aF /boot/System.map-" + verrel+" " + verrel + " &> /dev/null || :")
|
||||
|
||||
if (kmp !=""):
|
||||
print("modules=( $(cat /var/run/rpm-kmod-" + kmod_name + "-modules) )")
|
||||
print("#rm /var/run/rpm-kmod-" + kmod_name + "-modules")
|
||||
print("""if [ -x "/sbin/weak-modules" ]; then
|
||||
printf '%s\\n' "${modules[@]}" | /sbin/weak-modules --remove-modules
|
||||
fi""")
|
||||
|
||||
print("%files -n kmod-" + kmod_name)
|
||||
kmp_override_filelist= sys.argv[3]
|
||||
if kmp_override_filelist == '%filelist':
|
||||
print("%defattr(644,root,root,755)")
|
||||
print("/lib/modules/" + verrel)
|
||||
print("/lib/firmware/")
|
||||
else:
|
||||
with open(kmp_override_filelist) as f:
|
||||
for line in f:
|
||||
print(line, end = '')
|
||||
|
||||
#for i in range(len(sys.argv)):
|
||||
if (sys.argv[1] == "verrel"):
|
||||
print_verrel()
|
||||
if (sys.argv[1] == "rpmtemplate_kmp"):
|
||||
kmp=1
|
||||
print_rpmtemplate()
|
||||
else:
|
||||
print("Error: Unknown option 'sys.argv[i]'.")
|
||||
exit()
|
||||
|
||||
20
macros.kmp
Normal file
20
macros.kmp
Normal file
@ -0,0 +1,20 @@
|
||||
# Use these macros to differentiate between RH and other KMP implementation(s).
|
||||
|
||||
kernel_module_package_release 1
|
||||
|
||||
|
||||
|
||||
#kernel_module_package [ -n name ] [ -v version ] [ -r release ]
|
||||
# [ -f filelist]
|
||||
#
|
||||
|
||||
%kernel_module_package_buildreqs %global kmodtool_generate_buildreqs 1 \
|
||||
kernel-devel
|
||||
|
||||
%kernel_module_package(n:v:r:f:) %{expand:%( \
|
||||
%define kmodtool /usr/lib/rpm/openEuler/kmodtool.py\
|
||||
%define latest_kernel $(rpm -q --qf '%{VERSION}-%{RELEASE}\\\\n' `rpm -q kernel-devel` | head -n 1) \
|
||||
%{!?kernel_version:%{expand:%%global kernel_version %{latest_kernel}}} \
|
||||
%global kverrel %(%{kmodtool} verrel %{?kernel_version} 2>/dev/null) \
|
||||
python3 %{kmodtool} rpmtemplate_kmp %{-n*}%{!-n:%name} %{kverrel} %{-f*}%{!-f:%filelist} \
|
||||
)}
|
||||
Loading…
x
Reference in New Issue
Block a user