!17 定义内核模块快速打包的宏,用于内核ko的一键式打包,提高易用性

Merge pull request !17 from 章柳燕/master
This commit is contained in:
openeuler-ci-bot 2020-06-24 09:44:18 +08:00 committed by Gitee
commit a17e3547b2
3 changed files with 121 additions and 2 deletions

View File

@ -12,11 +12,13 @@ Source2: rpmrc
Source3: macros Source3: macros
Source4: config.guess Source4: config.guess
Source5: config.sub Source5: config.sub
Source6: kmodtool.py
Source10: macros.perl Source10: macros.perl
Source11: macros.python Source11: macros.python
Source12: macros.go Source12: macros.go
Source13: macros.forge Source13: macros.forge
Source14: macros.kmp
Source20: openEuler-hardened-cc1 Source20: openEuler-hardened-cc1
Source21: openEuler-hardened-ld Source21: openEuler-hardened-ld
@ -37,7 +39,6 @@ Provides: perl-srpm-macros
Provides: rust-srpm-macros Provides: rust-srpm-macros
Provides: go-srpm-macros Provides: go-srpm-macros
Provides: kernel-rpm-macros Provides: kernel-rpm-macros
Obsoletes: kernel-rpm-macros
Obsoletes: python-rpm-macros Obsoletes: python-rpm-macros
Obsoletes: python2-rpm-macros Obsoletes: python2-rpm-macros
Obsoletes: python3-rpm-macros Obsoletes: python3-rpm-macros
@ -76,6 +77,12 @@ Provides: system-rpm-config = %{version}-%{release}
%description %description
specific rpm configuration files for %{vendor}. 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 %prep
%setup -c -T %setup -c -T
cp -p %{sources} . 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} config.*
install -p -m 755 -t %{buildroot}%{rpmvdir} brp-* install -p -m 755 -t %{buildroot}%{rpmvdir} brp-*
install -p -m 644 -t %{buildroot}%{rpmvdir} openEuler-* install -p -m 644 -t %{buildroot}%{rpmvdir} openEuler-*
install -p -m 755 -t %{buildroot}%{rpmvdir} kmodtool.py
mkdir -p %{buildroot}%{_rpmconfigdir}/macros.d 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} mkdir -p %{buildroot}%{_fileattrsdir}
@ -103,7 +111,14 @@ mkdir -p %{buildroot}%{_fileattrsdir}
%{_rpmconfigdir}/macros.d/ %{_rpmconfigdir}/macros.d/
%{_rpmconfigdir}/macros.d/* %{_rpmconfigdir}/macros.d/*
%files -n kernel-rpm-macros
%{rpmvdir}/kmodtool.py
%{_rpmconfigdir}/macros.d/macros.kmp
%changelog %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 * Wed May 6 2020 openEuler Buildteam <buildteam@openeuler.org> - 30-10
- Type:enhancement - Type:enhancement
- ID:NA - ID:NA

83
kmodtool.py Normal file
View 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()

21
macros.kmp Normal file
View File

@ -0,0 +1,21 @@
# 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} \
)}