使用RPM编译CentOS内核时替换源文件

Replace Source Files When Compiling CentOS Kernel with RPM

我正在尝试修改其中一个 CentOS (7.6) 内核源文件并重新编译所有这些文件以供以后安装。

我按照 wiki.centos 上的指南来定制内核: https://wiki.centos.org/HowTos/Custom_Kernel

我发现在第5步中,RPM方法总是从tar个文件中解压源文件并替换我在BUILD/中的修改。

因此,我改变了方法。我将我的修改放在另一个地方,并在 SPECS/ 下的 kernel.spec 文件中添加一行,以将我的文件复制到 BUILD/.即,在 kernel.spec 中的 %build 之前放置带有 cp 命令的一行(解压后)。但是在%build段编译出错:

...
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.Vd6by5
BUILDING A KERNEL FOR x86_64...
USING ARCH=x86_64
...
###
### Now generating an X.509 key pair to be used for signing modules.
###
### If this takes a long time, you might wish to run rngd in the
### background to keep the supply of entropy topped up.  It
### needs to be run as root, and uses a hardware random
### number generator if one is available.
###
Generating a 3072 bit RSA private key
....++
......................................................................................................................................................................................++
writing new private key to 'signing_key.priv'
-----
###
### Key pair generated.
###
  - Including cert /home/user/rpmbuild/BUILD/kernel-3.10.0-957.12.2.el7/linux-3.10.0-957.12.2.el7.v2.x86_64/centos-kpatch.x509
  - Including cert /home/user/rpmbuild/BUILD/kernel-3.10.0-957.12.2.el7/linux-3.10.0-957.12.2.el7.v2.x86_64/centos-ldup.x509
  - Including cert signing_key.x509


RPM build errors:

有人可以建议我一个更好的方法来替换编译过程中的源文件吗? 谢谢。

我自己找到了解决方案。我们应该在 RPM 中应用 patch 来指示修改后的文件与原始文件之间的差异,而不是直接替换文件。

首先,使用diff命令构建补丁。然后,修改规范文件,kernel.spec,将补丁应用于构建过程。

本站给出了使用这种方式编译内核的例子: https://www.hiroom2.com/2016/05/29/centos-7-rebuild-kernel-with-src-rpm/

更清晰的补丁文件参考: https://rpm-packaging-guide.github.io/#patching-software