Centos7通过内核源码制作rpm包

安装编译所需软件

yum install asciidoc audit-libs-devel bash bc binutils binutils-devel bison diffutils elfutils
yum install elfutils-devel elfutils-libelf-devel findutils flex gawk gcc gettext gzip hmaccalc hostname java-devel
yum install m4 make module-init-tools ncurses-devel net-tools newt-devel numactl-devel openssl
yum install patch pciutils-devel perl perl-ExtUtils-Embed pesign python-devel python-docutils redhat-rpm-config
yum install rpm-build sh-utils tar xmlto xz zlib-devel
yum groupinstall "Development Tools"

创建一个普通用户

useradd ker
passwd ker
su - ker

需要保证家目录下有大于10G的空间

创建rpm所需目录

mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros

安装内核源码组件

从这些地方找寻内核的源代码组件:

以kernel-3.10.0-1160为例:

rpm -i http://vault.centos.org/7.9.2009/updates/Source/SPackages/kernel-3.10.0-1160.11.1.el7.src.rpm 2>&1 | grep -v exist

解压源码并生成源码

cd ~/rpmbuild/SPECS
rpmbuild -bp --target=$(uname -m) kernel.spec

设置内核

cd ~/rpmbuild/BUILD/kernel-*/linux-*/
cp configs/kernel-3.10.0-`uname -m`.config .config
或
cp /boot/config-`uname -r` .config

首先执行 make oldconfig。现在你应该执行 make menuconfig、make gconfig 或 make xconfig 来自定内核的设置。当你完成后,请记得存储你的改动。

  • uname -i输出的参数添加到.config文件的第一行
sed -i "1i# `uname -i`" .config
  • 现在将 .config 档复制回 configs/ 目录内。这基本上与先前的复制指令刚刚相反:
cp .config configs/kernel-3.10.0-`uname -m`.config
  • 最后一步就是将 configs/ 目录内的所有内容复制到 ~/rpmbuild/SOURCES/ 目录内:
cp configs/* ~/rpmbuild/SOURCES

更改内核的 spec 文件

cd ~/rpmbuild/SPECS
cp kernel.spec kernel.spec.bak
vi kernel.spec

在第 8 行,buildid 的定义本来是一个注释。
它必须被取消注释及赋予一个数值,好避免与你现时安装了的内核互相抵触。这将这行更改如下列样子般:

%define buildid .xxx

xxx替换为自定义内容

编译新内核

cd ~/rpmbuild/SPECS
rpmbuild -bb --target=`uname -m` --without kabichk kernel.spec
或者后台编译
rpmbuild -bb --target=`uname -m` --without kabichk kernel.spec 2> build-err.log | tee build-out.log

你可以通过 --with 及/或 --without 这些选项及相关的引数在 rpmbuild 指令内加入一些有用的选项。值得留意的主要选项包括:

--with baseonly
--without up
--without debug
--without debuginfo
--without kabichk

举个例说,单要创建基本内核组件,请使用:

--with baseonly --without debug --without debuginfo

安装新内核

cd ~/rpmbuild/RPMS/`uname -m`/
yum localinstall kernel-*.rpm
或
rpm -ivh kernel-*.rpm

设置为默认启动内核

cat /boot/grub2/grub.cfg | grep menuentry
grub2-editenv list
grub2-set-default ''CentOS Linux (3.10.0-1160.el7.local.x86_64) 7 (Core)''
grub2-editenv list
reboot
---
uname -r
3.10.0-1160.el7.local.x86_64

注意grub2-set-default后设置的是通过cat /boot/grub2/grub.cfg | grep menuentry筛选出的开机启动项

猜你喜欢

转载自blog.csdn.net/qq_33235529/article/details/114979560
今日推荐