在一些场景下需要在业务安装之前升级操作系统内核版本,既如此,直接定制内核版本,当操作系统灌装完成时自带高版本内核,效率会更高。
安装依赖 1 yum install -y createrepo genisoimage syslinux isomd5sum ncurses-devel bc flex
挂载官方Minimal镜像 这里我们先采用Minimal镜像进行实验
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [root@localhost opt]# cd /opt [root@localhost opt]# curl -O "https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso" [root@localhost opt]# mkdir -p /mnt/cdrom [root@localhost opt]# mount -o loop /opt/CentOS-7-x86_64-Minimal-2009.iso /mnt/cdrom mount: /dev/loop0 is write-protected, mounting read-only [root@localhost opt]# ls -lrt /mnt/cdrom/ total 696 -rw-rw-r-- 21 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-Testing-7 -rw-rw-r-- 21 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-7 -rw-rw-r-- 21 root root 18009 Dec 10 2015 GPL -rw-rw-r-- 21 root root 227 Aug 30 2017 EULA drwxr-xr-x 2 root root 2048 Oct 27 2020 LiveOS drwxr-xr-x 3 root root 2048 Oct 27 2020 EFI drwxr-xr-x 3 root root 2048 Oct 27 2020 images -rw-r--r-- 3 root root 14 Oct 30 2020 CentOS_BuildTag drwxr-xr-x 2 root root 2048 Nov 3 2020 isolinux drwxr-xr-x 2 root root 673792 Nov 4 2020 Packages drwxr-xr-x 2 root root 4096 Nov 4 2020 repodata -r--r--r-- 1 root root 2883 Nov 4 2020 TRANS.TBL
拷贝镜像内容 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@localhost opt]# mkdir /ISO [root@localhost opt]# cp -raf /mnt/cdrom/* /ISO [root@localhost opt]# ls -lrt /ISO total 328 -rw-rw-r-- 1 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-Testing-7 -rw-rw-r-- 1 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-7 -rw-rw-r-- 1 root root 18009 Dec 10 2015 GPL -rw-rw-r-- 1 root root 227 Aug 30 2017 EULA drwxr-xr-x 2 root root 43 Oct 27 2020 LiveOS drwxr-xr-x 3 root root 35 Oct 27 2020 EFI drwxr-xr-x 3 root root 57 Oct 27 2020 images -rw-r--r-- 1 root root 14 Oct 30 2020 CentOS_BuildTag drwxr-xr-x 2 root root 198 Nov 3 2020 isolinux drwxr-xr-x 2 root root 225280 Nov 4 2020 Packages drwxr-xr-x 2 root root 4096 Nov 4 2020 repodata -r--r--r-- 1 root root 2883 Nov 4 2020 TRANS.TBL
替换5.15内核包 此前在在CentOS 7上编译和升级Linux内核 一文中,介绍了如何编译和升级5.15内核,这里我们就复用。
先看下Minimal镜像中自带的内核相关包
1 2 3 4 5 [root@localhost opt]# cd /ISO/Packages/ [root@localhost Packages]# ls -lrt kernel-*.rpm -rw-rw-r-- 1 root root 52709940 Oct 20 2020 kernel-3.10.0-1160.el7.x86_64.rpm -rw-rw-r-- 1 root root 8514900 Oct 20 2020 kernel-tools-3.10.0-1160.el7.x86_64.rpm -rw-rw-r-- 1 root root 8405528 Oct 20 2020 kernel-tools-libs-3.10.0-1160.el7.x86_64.rpm
删除3.10内核包:
1 rm -f kernel-3.10.0-1160.el7.x86_64.rpm
将5.15.145版本内核放入/ISO/Packages/
内
1 2 3 4 [root@localhost Packages]# ls -lrt kernel-*.rpm -rw-rw-r-- 1 root root 8514900 Oct 20 2020 kernel-tools-3.10.0-1160.el7.x86_64.rpm -rw-rw-r-- 1 root root 8405528 Oct 20 2020 kernel-tools-libs-3.10.0-1160.el7.x86_64.rpm -rw-r--r-- 1 root root 59958256 Dec 23 20:33 kernel-ml-5.15.145-1.el7.x86_64.rpm
编辑引导文件 BIOS引导 编辑isolinux/isolinux.cfg
文件,需要修改label linux部分,其中label部分menu default唯一,设置镜像默认进入模式
1 2 3 4 5 6 7 8 9 10 11 12 label linux menu label ^Install CentOS 7.9 (Kernel-5.15.145-1) menu default kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=CentOS7 label check menu label Test this ^media & install CentOS 7 kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet menu separator # insert an empty line
EFI引导 编辑EFI/BOOT/grub.cfg
文件,修改menuentry ‘Install CentOS 7’部分
1 2 3 4 5 6 7 search --no-floppy --set=root -l 'CentOS 7 x86_64' ### BEGIN /etc/grub.d/10_linux ### menuentry 'Install CentOS 7.9 (Kernel-5.15.145-1)' --class fedora --class gnu-linux --class gnu --class os { linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CentOS7 quiet initrdefi /images/pxeboot/initrd.img }
准备comps.xml 在生成安装盘之前,需要注意对comps.xml
文件进行修改。这个文件用来告知安装程序anaconda,用户选择了某个组是应该有哪些包需要安装,定义了在安装过程中,包是如何被捆绑在一起的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@localhost ISO]# ls -lrt /mnt/cdrom/repodata/ total 3055 -rw-r--r-- 2 root root 811 Oct 27 2020 repomd.xml.asc -rw-r--r-- 2 root root 744670 Oct 30 2020 cca56f3cffa18f1e52302dbfcf2f0250a94c8a37acd8347ed6317cb52c8369dc-c7-x86_64-comps.xml -rw-r--r-- 2 root root 156763 Oct 30 2020 a4e2b46586aa556c3b6f814dad5b16db5a669984d66b68e873586cd7c7253301-c7-x86_64-comps.xml.gz -rw-r--r-- 1 root root 232765 Nov 3 2020 95e7738c1060314a439e6970aeebe54ee6a729cc66351fc02edc057a524b0ea3-filelists.xml.gz -rw-r--r-- 1 root root 312426 Nov 3 2020 91cceb5edd8689502596ad298ec64bad45991dd758a8180bfe18a6d8a3281c28-filelists.sqlite.bz2 -rw-r--r-- 1 root root 205995 Nov 3 2020 6da4a53c1231b84985efc60f9ccac32e6c33c0831d7f352d003fd4bfc39c373a-other.sqlite.bz2 -rw-r--r-- 1 root root 183471 Nov 3 2020 57ae40f3495cc6e04d91b0eb504e740f901c3b48ec2179e3736256db08fa755c-other.xml.gz -rw-r--r-- 1 root root 409248 Nov 3 2020 136912ae46ca9ed27661ea6528fd544962d83095e3cdbc6149a37ddedf3a153c-primary.xml.gz -rw-r--r-- 1 root root 3734 Nov 3 2020 repomd.xml -rw-r--r-- 1 root root 3539 Nov 3 2020 d4de4d1e2d2597c177bb095da8f1ad794d69f76e8ac7ab1ba6340fdd0969e936-c7-minimal-x86_64-comps.xml.gz -rw-r--r-- 1 root root 851584 Nov 3 2020 b6404d2de68763bab0d9fa3f8e1d6f5bc057b2c4a1919a89cc083d5dbc6efb19-primary.sqlite.bz2 -rw-r--r-- 1 root root 15455 Nov 3 2020 83b61f9495b5f728989499479e928e09851199a8846ea37ce008a3eb79ad84a0-c7-minimal-x86_64-comps.xml -r--r--r-- 1 root root 3412 Nov 3 2020 TRANS.TBL
拷贝comps.xml
,用于二次编辑使用
1 2 3 4 5 6 7 8 9 10 11 12 [root@localhost ISO]# cp /mnt/cdrom/repodata/*-c7-minimal-x86_64-comps.xml /ISO/comps.xml [root@localhost ISO]# cat /ISO/comps.xml <group> <id>core</id> <name>Core</name> <packagereq type="default">iwl6050-firmware</packagereq> <packagereq type="default">iwl7260-firmware</packagereq> <packagereq type="default">iwl7265-firmware</packagereq> <packagereq type="default">kernel-tools</packagereq> <packagereq type="default">libertas-sd8686-firmware</packagereq> <packagereq type="default">libertas-sd8787-firmware</packagereq> <packagereq type="default">libertas-usb8388-firmware</packagereq>
在kernel-tools处,添加新内核kernel-ml
1 2 3 4 5 6 7 <packagereq type="default">iwl7260-firmware</packagereq> <packagereq type="default">iwl7265-firmware</packagereq> <packagereq type="default">kernel-ml</packagereq> <packagereq type="default">kernel-tools</packagereq> <packagereq type="default">libertas-sd8686-firmware</packagereq> <packagereq type="default">libertas-sd8787-firmware</packagereq> <packagereq type="default">libertas-usb8388-firmware</packagereq>
生成repodata 删除旧有的repodata,并通过刚才编辑的comps.xml
文件重新生成新的repodata
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [root@localhost ISO]# rm -rf /ISO/repodata/ [root@localhost ISO]# cd /ISO [root@localhost ISO]# createrepo -g comps.xml . Spawning worker 0 with 510 pkgs Spawning worker 1 with 510 pkgs Spawning worker 2 with 510 pkgs Spawning worker 3 with 510 pkgs Spawning worker 4 with 509 pkgs Spawning worker 5 with 509 pkgs Spawning worker 6 with 509 pkgs Spawning worker 7 with 509 pkgs Workers Finished Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs Sqlite DBs complete
生成ISO镜像 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 [root@localhost ISO]# genisoimage -joliet-long -V CentOS7 -o CentOS-7.9-minimal-kernel-5.15.145.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 -e images/efiboot.img -no-emul-boot /ISO/ I: -input-charset not specified, using utf-8 (detected in locale settings) genisoimage 1.1.11 (Linux) Scanning /ISO/ Scanning /ISO/EFI Scanning /ISO/EFI/BOOT Scanning /ISO/EFI/BOOT/fonts Excluded: /ISO/EFI/BOOT/fonts/TRANS.TBL Excluded: /ISO/EFI/BOOT/TRANS.TBL Excluded: /ISO/EFI/TRANS.TBL Scanning /ISO/images Scanning /ISO/images/pxeboot Excluded: /ISO/images/pxeboot/TRANS.TBL Excluded: /ISO/images/TRANS.TBL Scanning /ISO/isolinux Excluded by match: /ISO/isolinux/boot.cat Excluded: /ISO/isolinux/TRANS.TBL Scanning /ISO/LiveOS Excluded: /ISO/LiveOS/TRANS.TBL Scanning /ISO/Packages Excluded: /ISO/Packages/TRANS.TBL Excluded: /ISO/TRANS.TBL Scanning /ISO/repodata Using RPM_G000.;1 for /RPM-GPG-KEY-CentOS-Testing-7 (RPM-GPG-KEY-CentOS-7) ... ... 96.54% done, estimate finish Sat Dec 30 20:43:01 2023 97.47% done, estimate finish Sat Dec 30 20:43:01 2023 98.40% done, estimate finish Sat Dec 30 20:43:01 2023 99.32% done, estimate finish Sat Dec 30 20:43:01 2023 Total translation table size: 123610 Total rockridge attributes bytes: 54615 Total directory bytes: 92160 Path table size(bytes): 140 Done with: The File(s) Block(s) 538383 Writing: Ending Padblock Start Block 538493 Done with: Ending Padblock Block(s) 150 Max brk space used a3000 538643 extents written (1052 MB)
查看生成的镜像
1 2 [root@localhost ISO]# ls -lrt *.iso -rw-r--r-- 1 root root 1103140864 Dec 30 20:43 CentOS-7.9-minimal-kernel-5.15.145.iso
isohybrid则是syslinux的一个组件,可以将ISO镜像转换为可在BIOS和UEFI两种模式下启动的混合镜像。
1 2 3 [root@localhost ISO]# isohybrid CentOS-7.9-minimal-kernel-5.15.145.iso isohybrid: Warning: more than 1024 cylinders: 1053 isohybrid: Not all BIOSes will be able to boot this device
使用implantisomd5校验并写入md5值
1 2 3 4 5 6 7 [root@localhost ISO]# implantisomd5 CentOS-7.9-minimal-kernel-5.15.145.iso Inserting md5sum into iso image... md5 = 25fdb7ee106de8b70c21100818b3d17a Inserting fragment md5sums into iso image... fragmd5 = 3a2efaa40d6c802865f4e1cdbb9e61b2737baa1815ab83dd2238fb77e335 frags = 20 Setting supported flag to 0
版本验证 1 2 [root@192 develop]# uname -a Linux 192.168.126.141 5.15.145-1.el7.x86_64 #1 SMP Sat Dec 23 12:17:11 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
DVD版本镜像处理 上面Minimal镜像的处理,如果使用DVD版本,则处理时略有部分不同,首先看一下DVD版本相关的kernel包
1 2 3 4 5 6 7 8 [root@localhost Packages]# ls -lrt kernel-*.rpm -rw-rw-r-- 1 root root 52709940 Oct 20 2020 kernel-3.10.0-1160.el7.x86_64.rpm -rw-rw-r-- 1 root root 18858740 Oct 20 2020 kernel-debug-devel-3.10.0-1160.el7.x86_64.rpm -rw-rw-r-- 1 root root 18787608 Oct 20 2020 kernel-devel-3.10.0-1160.el7.x86_64.rpm -rw-rw-r-- 1 root root 9449344 Oct 20 2020 kernel-headers-3.10.0-1160.el7.x86_64.rpm -rw-rw-r-- 1 root root 8514900 Oct 20 2020 kernel-tools-3.10.0-1160.el7.x86_64.rpm -rw-rw-r-- 1 root root 8405528 Oct 20 2020 kernel-tools-libs-3.10.0-1160.el7.x86_64.rpm -rw-rw-r-- 1 root root 8413796 Oct 20 2020 kernel-abi-whitelists-3.10.0-1160.el7.noarch.rpm
相比Minimal镜像多出不少,因此需要将kernel-devel也做处理
1 [root@localhost Packages]# rm -f kernel-3.10.0-1160.el7.x86_64.rpm kernel-devel-3.10.0-1160.el7.x86_64.rpm
将5.15.145版本内核和devel包放入/ISO/Packages/
内
1 2 3 4 5 6 7 8 [root@localhost Packages]# ls -lrt kernel-*.rpm -rw-rw-r-- 1 root root 18858740 Oct 20 2020 kernel-debug-devel-3.10.0-1160.el7.x86_64.rpm -rw-rw-r-- 1 root root 9449344 Oct 20 2020 kernel-headers-3.10.0-1160.el7.x86_64.rpm -rw-rw-r-- 1 root root 8514900 Oct 20 2020 kernel-tools-3.10.0-1160.el7.x86_64.rpm -rw-rw-r-- 1 root root 8405528 Oct 20 2020 kernel-tools-libs-3.10.0-1160.el7.x86_64.rpm -rw-rw-r-- 1 root root 8413796 Oct 20 2020 kernel-abi-whitelists-3.10.0-1160.el7.noarch.rpm -rw-r--r-- 1 root root 59958256 Dec 23 20:33 kernel-ml-5.15.145-1.el7.x86_64.rpm -rw-r--r-- 1 root root 14438184 Dec 23 20:33 kernel-ml-devel-5.15.145-1.el7.x86_64.rpm
在编辑comps.xml
文件时也有不同,需要在kernel-tools处同时添加kernel-ml、kernel-ml-devel
1 2 3 4 5 6 7 8 9 [root@localhost Packages]# cp /mnt/cdrom/repodata/*-c7-x86_64-comps.xml /ISO/comps.xml <packagereq type="default">iwl6050-firmware</packagereq> <packagereq type="default">iwl7260-firmware</packagereq> <packagereq type="default">kernel-ml</packagereq> <packagereq type="default">kernel-ml-devel</packagereq> <packagereq type="default">kernel-tools</packagereq> <packagereq type="default">libsysfs</packagereq> <packagereq type="default">linux-firmware</packagereq>
另外DVD版本中携带了vdo相关包,其中vdo-6.1.3.23和kmod-kvdo-6.1.3.23依赖内核kernel-3.10.0-1160
1 2 3 4 5 6 Running transaction Installing : kernel-3.10.0-1160.105.1.el7.x86_64 1/5 Installing : kmod-kvdo-6.1.3.23-5.el7.x86_64 2/5 Installing : libyaml-0.1.4-11.el7_0.x86_64 3/5 Installing : PyYAML-3.10-11.el7.x86_64 4/5 Installing : vdo-6.1.3.23-5.el7.x86_64 5/5
因此需要将comps.xml中如下两行删除
1 2 <packagereq type ="default" > kmod-kvdo</packagereq > <packagereq type ="default" > vdo</packagereq >
否则在DVD版本采用Gnome Desktop或者Server with GUI时会出现Error checking software selection
。
其他步骤则与Minimal镜像一样,制作完毕后安装即可。
参考 1、https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/storage_administration_guide/vdo-integration 2、https://wiki.syslinux.org/wiki/index.php?title=Isohybrid 3、https://linux.die.net/man/1/implantisomd5 4、https://fedoraproject.org/wiki/How_to_use_and_edit_comps.xml_for_package_groups