Centos7编译并打包内核(非本机编译)
一、背景
现需要通过自己编译内核来实现某些特性,来替换服务器端Centos7的内核,但是服务器剩余磁盘空间不足(编译内核需要至少14G空闲磁盘空间),只能使用其他机器(也是Centos7)来进行编译工作,再移植编译好的内核到服务器。
二、准备
- 内核源码 (https://www.kernel.org/,选择tarball下载源码,以5.7.7为例https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.7.7.tar.xz)
- 开发工具
# yum -y install gcc* ncurses-devel bc openssl openssl-devel libssl-dev perl rpm-build
- 原系统的config文件,在原系统/boot/config-* (可选)
三、编译内核
- 将下载好的linux-5.7.7.tar.xz放到进行编译工作的机器中,例如放入/usr/src/
- 解压分两步,第一步解压xz得到tar包
xz -d linux-5.7.7.tar.xz
第二步解压tar包得到linux-5.7.7目录tar -xvf linux-5.7.7.tar
- (可选)将原系统的config文件复制到linux-5.7.7根目录下,并重命名为 .config
- 如果不是第一次编译,需先在根目录下输入命令
make mrproper
来清理源代码树和配置文件 -
make menuconfig
进入配置界面,若已经放入.config,选择 Load 加载文件,在已有文件的基础上再进行配置,免去一些麻烦。配置完成后SAVE,然后EXIT直到退出到命令行 - 进行打包编译
make rpm
或者make binrpm-pkg
(生成包含内核和驱动的RMP包)生成的rpm在/root/rpmbuild/RPMS/x86_64/kernel-5.7.7.x86_64.rpm
若不需要打包移植内核,只需make && make install
即可。
四、移植安装内核
- 将生成的rpm包上传至服务器,执行
rpm -ivh kernel-5.7.7.x86_64.rpm
安装(make binrpm-pkg同时会生成kernel-5.7.7-headers.rpm无需安装) - 修改grub选择新内核启动。
注意:Centos7的grub文件位置可能不同,我的在/boot/grub/grub.conf, 有的在/boot/grub2/grub.conf 或者 /boot/efi/EFI/centos/grub.cfg
如图所示,修改 default= 第几个内核,从0开始,图中5.7.7是我们新安装的内核,排在第一位,即default=0(第二位default=1以此类推),保存退出,重启即可进入新内核。
五、参考资料
- linux系统替换新内核(编译安装替换与打包替换)
https://blog.csdn.net/star_xiong/article/details/17357821
*
年份久远,可以看看,但移植内核部分不建议照做,我认为可能内容有误,试着操作时无法生成正常的initrd.img文件,且进入新内核失败,服务器直接崩溃无法进入系统
- 如何编译Linux Kernel(linux-5.6.12内核)并制作成rpm文件
https://www.zhangfangzhou.cn/how-to-compile-linux-kernel-make-rpm.html
make编译了一遍,make rpm又编译了一遍,有些多余,且对make binrpm-pkg命令的解释与其他资料有所冲突,实际上确实生成了两个rpm包,而不是一个
- rpm与src.rpm区别及安装
https://www.iteye.com/blog/ontheroad-luckhouge-1124215
- 手工编译Linux内核rpm包
https://blog.csdn.net/hbuxiaofei/article/details/81187677
- Linux CentOS 7.X 如何修改内核启动默认顺序
https://blog.csdn.net/ikukaku/article/details/84567789?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
命令行方式修改内核启动顺序,未尝试,感觉还是需要查看内核顺序,不如直接修改配置文件
- Centos 7 GRUB与内核版本切换
https://blog.csdn.net/qq_43401808/article/details/90371759
找不到grub配置文件的可以看看,也包括内核的删除
如有错误请指正