Linux Centos 内核替换与ISO制作详细指南

本文详细介绍了在CentOS系统中进行内核替换和制作自定义ISO镜像的步骤和注意事项。

首先,介绍了在替换内核过程中可能遇到的各种错误,并提供了解决方法,如处理vmlinuz权限问题、initrd.img加载失败、内核模块体积过大等。接着,给出了制作ISO镜像的步骤,包括将原生ISO内容复制到磁盘、制作initrd.gz(或initrd.img)和kernel-xxx.rpm等操作。同时,提供了Anaconda安装日志及相关信息的查看方法。本文适用于需要定制CentOS系统安装过程或进行内核升级的用户,提供了一份详细的操作指南。

各临时路径说明

将内核解包在/root/kernel/linux-4.14.141
原生ISO文件内容复制到/ISO/
将initrd解包在/root/initrd/
将内核模块安装在/root/modinstall
将squashfs解包在/root/,rootfs.img会在/root/squash-root/LiveOS/rootfs.img

过程中遇到的错误与解决方法

  • vmlinuz没有增加执行权限。

  • initrd.img无法被加载,改用gzip进行压缩,修改isolinux/isolinux.cfg中的initrd.img为initrd.gz。

  • initrd.img体积庞大,有两种解决办法,一是在编译内核时用make modules_install INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=/root/modinstall,build ko的时候会加上–strip-debug,这样会让build出的ko大小大幅缩小;二是编译完成后,在lib/modules/中执行find . -name *.ko -exec eu-strip –remove-comment {} \;

  • 在VMware测试并不需要修改grub.conf或grub.cfg,因为VMware用的是ISOLINUX引导方式,只需要修改isolinux/isolinux.cfg文件。

  • 制作kernel的rpm有两种办法,一种是使用rpmrebuild修改旧版rpm,替换里面的vmlinuz、initrd.img,修改SPEC文件,但这种方式需要修改的内容较多,容易找不到文件,故采取另一种方式;另一种方法是直接使用make rpm-pkg -j64。

  • genisoimage命令的选项-b使用错误(-b后面应该跟引导镜像isolinux.bin)导致isolinux.cfg变成了二进制文件,所以无法引导系统。

  • squashfs.img和initrd.gz中的lib/modules/4.14.141必须一致,否则进入anaconda安装界面会报错。

  • 如果修改了Packages里的包,一定要执行createrepo命令,根据comps.xml重新生成repodata,否则最终安装kernel的rpm时会报错error populating transaction。

  • 系统安装进入dracut的可能原因是没有找到光盘介质,在grub.cfg中的inst.stage2=hd:LABEL=后面的名称一定要和genisoimage的-V参数后面的名称相同。

其他可能失败的解决方法

  • 可以通过修改.vmx配置文件或启动虚拟机时选择打开电源时进入固件来进入BIOS设置,选择光盘为第一启动项,不过一般不会是这个原因。

  • 如果内核rpm缺少依赖抛出kernel panic,rpm -qpR kernel-xxx.rpm查看依赖,修改/root/kernel/linux-4.14.141/scripts/package下的mkspec脚本,make rpm-pkg时,会调用到该脚本来生成内核RPM的SPEC文件,PreReq表示依赖类型为install前,这样就能先于内核rpm安装依赖。

替换内核全过程

编译内核

$ cd /root/kernel/
$ tar -xvJf linux-4.14.141.tar.xz # 或分两步,xz -d linux-4.14.141.tar.xz,tar -xvf linux-4.14.141.tar
$ cd linux-4.14.141
$ make mrproper
$ cp /boot/config-xxx ./.config # 使用系统中的config文件
$ yum install -y ncurses-devel bc flex ...
$ make menuconfig # 要选择XFS相关功能
$ make bzImage -j8 && make modules -j8 && make modules_install INSTALL_MOD_PATH=/root/modinstall/ INSTALL_MOD_STRIP=1 -j8

挂载系统ISO并复制ISO内容到磁盘

$ mkdir /mnt/cdrom /ISO
$ mount -o loop /root/CentOS-xxx.iso /mnt/cdrom
$ rsync -a /mnt/cdrom/ /ISO/ --exclude=repodata/ # 后续通过createrepo命令生成repodata
$ find /ISO/ -name TRANS.TBL -exec rm -f {} \; -print # 或者在上一步加上--exclude=TRANS.TBL参数

制作initrd.gz(或xz压缩方式的initrd.img)

$ cp /ISO/isolinux/initrd.img /root/
$ xz -d /root/initrd.img
$ mkdir /root/initrd
$ cd /root/initrd
$ cpio -ivmd < ../initrd.img
$ cp -r /root/modinstall/lib/modules/4.14.141/ /root/initrd/lib/modules/
$ rm -rf /root/initrd/lib/modules/3.10.x # 删除ISO中原来版本的内核模块目录
$ find ./ | cpio --quiet -H newc -o | gzip -9 -c >../initrd.gz # 如果使用xz -z打包,文件名就为initrd.img,系统安装时会自动判断为xz打包方式

制作kernel-xxx.rpm并替换

$ make rpm-pkg -j8 # 或者按下面的操作使用rpmrebuild修改旧版rpm
$ cp /root/rpmbuild/RPSS/x86/kernel-4.14.141.rpm /ISO/Packages

还有两个方法:
通过源码包和spec文件构建rpm:

rpmbuild kernel.spec

通过源码包重修改:
参考我的SRPM重修改方法。

复制bzImage和initrd.gz到isolinux/

$ cp /root/kernel/linux-4.14.141/arch/x86/boot/bzImage /ISO/isolinux/vmlinuz
$ chmod +x /ISO/isolinux/vmlinuz # 内核文件的权限必须至少是755
$ cp /root/initrd.gz /ISO/isolinux/initrd.gz

修改isolinux.cfg

$ vi isolinux.cfg
label linux
  menu label ^Install CentOS 7
  menu default
  kernel vmlinuz
  append initrd=initrd.gz inst.stage2=hd:LABEL=CentOS7

menu default表示默认指向Install CentOS 7
然后定义内核文件、initrd的名字以及ISO的label,该label和后面genisoimage命令的-V选项保持一致。

修改并替换squashfs.img

$ cp squashfs.img /root
$ cd /root
$ unsquashfs squashfs.img
$ mkdir /rootfs
$ mount squashfs-root/LiveOS/rootfs.img /rootfs
$ cp -r /root/modinstall/lib/modules/4.14.141/ /rootfs/modules/
$ rm -rf /rootfs/modules/3.10.x
$ umount /rootfs
$ unsquashfs -stat squashfs.img # 查看压缩方式和block大小
$ mksquashfs squashfs-root/ newsquashfs.img -comp xz -b 131072 -Xbcj x86 -Xdict-size 131072 # 根据原来的squashfs.img设置参数
$ cp newsquashfs.img /ISO/LiveOS/squashfs.img

制作comps.xml,生成repodata

$ cp /mnt/cdrom/repodata <随机值>-comps.xml /ISO/comps.xml # 如果新增了包,要修改该文件,替换内核rpm包不需要修改该文件
$ cd /ISO
$ createrepo -g comps.xml . # 否则Packages会校验失败,报error populating transaction错误

制作ISO镜像

$ genisoimage -joliet-long -V CentOS7 -o centos7.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -cache-inodes -T -eltorito-alt-boot -b images/efiboot.img -no-emul-boot /ISO # -eltorito-alt-boot -e images/efiboot.img -no-emul-boot用于EFI引导模式

如果没有ISOLINUX引导,只使用EFI引导:

$ genisoimage -joliet-long -V CentOS7 -o centos7.iso -b EFI/BOOT/grubaa64.efi -c boot.catalog -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -cache-inodes -T -eltorito-alt-boot  -e images/efiboot.img -no-emul-boot /ISO

执行该命令使ISO能写入U盘被BIOS引导,否则只能通过DVD等引导:

$ isohybrid centos7.iso

安装系统

anaconda安装日志

可以参考:

1、Python---Anaconda安装

2、Anaconda安装与配置(Python环境及库依赖)

3、【Anaconda安装与环境配置教程】

一般性的anaconda消息anaconda.log,由anaconda运行的所有外部程序信息anaconda.program.log,可扩展的存储模块信息anaconda.storage.log,网络接口配置相关信息anaconda.ifcfg.log,yum安装软件包的信息anaconda.yum.log,硬件相关的系统信息anaconda.syslog。注意如果系统安装失败,则这些文件的信息会一起放在一个anaconda-tb-identifier文件中,这里identifier是一个随机字符串。文章来源地址https://www.toymoban.com/diary/share/750.html

到此这篇关于Linux Centos 内核替换与ISO制作详细指南的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/diary/share/750.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用
CentOS 7.6源码编译rpm包及打包到ISO镜像的实践教程
上一篇 2024年03月17日 21:36
使用 Python将pdf转化为图片
下一篇 2024年03月21日 15:44

相关文章

  • Linux系统【Centos7】更新内核更新软件详细教程

    更新内核: 1. 打开终端,输入命令 sudo yum update,等待更新完成。 2. 重启系统,输入命令 sudo reboot。 3. 在 GRUB 引导界面,选择最新的内核版本,按下回车键进入系统。 4. 在终端中输入命令 uname -r,查看当前使用的内核版本是否更新成功。 更新软件: 1. 打开终端,输入命令

    2024年02月09日
    浏览(25)
  • Centos7 制作系统镜像iso文件

    这部分针对有系统备份需求,防止系统遭受意外状况,无法紧急恢复。整体备份内容较大,建议考虑后再进行操作 本次使用 mondo 软件进行备份及制作镜像,基本上是一键到底 mondo 官网 1.1 安装mondo 1.2 制作备份镜像 选择备份到本地磁盘 Hard disk 选择备份路径,输入备份ISO镜像

    2024年01月15日
    浏览(35)
  • centos 7镜像(iso)下载图文教程(超详细)

    声明:本教程为本人学习笔记,仅供参考 声明:本教程为本人学习笔记,仅供参考 本教程将提供两种方式下载centos 7 系统镜像 1、阿里巴巴开源镜像站 2、清华大学开源软件镜像站 在下载之前,你先的搞清楚你的电脑支持多少位的,有64与32位之分,本教程以64位为例。 1、浏

    2024年02月07日
    浏览(27)
  • Windows 10 镜像 ISO 文件下载:详细指南与安全建议

    Windows 10 是微软最受欢迎的操作系统之一,为了安装或升级到 Windows 10,你需要获得官方的 Windows 10 镜像 ISO 文件。在本篇博客中,我们将提供详细的指南,教你如何下载 Windows 10 镜像 ISO 文件,并且分享一些建议,确保你的下载过程安全可靠。 1. 官方渠道 下载 Windows 10 镜像

    2024年02月12日
    浏览(17)
  • 【Linux】挂载CentOS 并配置 iso镜像文件为 yum 源

    有时候会遇到内网安装CentOS时,运维人员总是最小化安装,但是当你安装其他应用的时候,例如:MySQL,Nginx, Redis 系统中缺少的依赖很多。目前只有把ISO安装文件作为yum源,这样在安装编译其他的应用的时候,就不会缺少依赖了。 要将 ISO 文件挂载为 YUM 源,您可以按照以下

    2024年02月16日
    浏览(24)
  • 【Linux】Centos yum源替换

    YUM是基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。 CentOS 8操作系统版本结束了生命周期(EOL),Linux社区已不再维护该操作系统版本。建议您切换到Anolis或Alinux。如果

    2024年02月08日
    浏览(27)
  • 【Linux】切换内核版本(Centos)

    0 : CentOS Linux (3.10.0-1160.83.1.el7.x86_64) 7 (Core) 1 : CentOS Linux (3.10.0-1160.80.1.el7.x86_64) 7 (Core) 2 : CentOS Linux (3.10.0-1127.el7.x86_64) 7 (Core) 3 : CentOS Linux (3.10.0-1160.83.1.el7.x86_64.debug) 7 (Core) 4 : CentOS Linux (3.10.0-1160.80.1.el7.x86_64.debug) 7 (Core) 5 : CentOS Linux (0-rescue-0e5781d77781441b97290d7bad5663e2) 7 (Core) 将配

    2024年02月11日
    浏览(24)
  • Linux内核移植:内核的启动过程分析、启动配置与rootfs必要文件

     内核启动通常包括4个阶段: iROM代码启动(BIOS启动)。开发板上电后,先执行内部iROM中的固化代码,类似于BIOS,执行通电自检和初始化过程,包括初始化CPU、存储器、时钟、总线等一些必要的硬件资源。 启动引导加载程序BootLoader。根据启动引脚的电平,读取相应的存储

    2024年02月13日
    浏览(23)
  • 【Linux】教你用进程替换制作一个简单的Shell解释器

    本章的代码可以访问这里获取。 由于程序代码是一体的,本章在分开讲解各部分的实现时,代码可能有些跳跃,建议在讲解各部分实现后看一下源代码方便理解程序。 我们想要制作一个简单的 Shell 解释器,需要先观察Shell是怎么运行的,根据 Shell 的运行状态我们再去进行模

    2024年02月02日
    浏览(18)
  • Linux 内核模块加载过程之重定位

    1.1.1 struct load_info info 加载模块只需要读入模块的二进制代码即可,然后执行init_module系统调用。 我们先介绍下struct load_info info结构体。 struct load_info 是一个用于加载模块时存储相关信息的数据结构。 该结构体包含以下成员: name:模块的名称,以字符串形式存储。 mod:指向

    2024年02月10日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包