Centos7编译并打包内核(非本机编译)

时间:2024-04-01 10:05:11

一、背景

现需要通过自己编译内核来实现某些特性,来替换服务器端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以此类推),保存退出,重启即可进入新内核。
    Centos7编译并打包内核(非本机编译)

五、参考资料

  • 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配置文件的可以看看,也包括内核的删除

如有错误请指正