前言
在日常产品交付中会有如下需求:
- 客户自己安装centos / ubuntu / kylin iso,然后我们把rpm包给到客户
- 我们直接将rpm包封装到iso,给客户交付整体iso,这样不管是对于客户还是对于公司都是最省心的,会避免很多因为系统包版本不一致导致的安装失败问题
当前项目中的需求
-
在代码中会用到nmap命令来判断远端服务器ip和port是否可用,如果部署集群很多,手动安装显然不是最佳选择
-
所以我们需要将nmap-7.93-1.x86_64.rpm添加到kylin iso中,最终交付客户
给Kylin iso添加nmap rpm包
- 先看未添加nmap rpm包前直接安装kylin iso后,会报如下错误:
- 先去官网找到nmap rpm包并copy到build 服务器
- mount iso 并copy iso里全部内容到新的目录
mount /root/SCloud-1.0-v8.0-153-kylin-v10-202212021405-cbf3cc9.iso /mnt/iso/
mkdir /mnt/iso_bak
# 这里一定加-r选项,因为iso会有很多隐藏目录
cp -rfp /mnt/iso/ /mnt/iso_bak/
- iso本地路径常见的目录及文件理解
Packages | 系统所有的rpm package都在这个目录,下面可有子目录 比如这里就会有Packages/Bigtera/xxx.rpm |
repodata | 系统rpm包metadate源数据 bigtera-x86_64-comps.xml |
isolinux | 存放光盘启动时的安装界面信息,里面有两个核心文件 xxx.ks 是kickstart 自动安装应答脚本 isolinux.cfg,系统引导配置文件,比如标注ks的路径 append initrd=initrd.img inst.stage2=hd:LABEL=Kylin inst.ks=cdrom:/isolinux/bigtera.ks quiet |
.disk | 会存放一下系统版本,tag,version之类的信息 big_product big_tag big_version |
images | 系统启动映像文件 |
.productinfo .discinfo | .productinfo会存放系统release版本信息 Kylin Linux Advanced Server ----------------------------------------- .discinfo 系统的架构比如x86 or ARM Kylin Linux Advanced Server |
EFI | UEFI 启动模式下必须文件,Legacy模式下是非必须文件 |
- 将我们自定义rpm包copy到iso Package目录
cp /root/nmap-7.93-1.x86_64.rpm /mnt/iso_bak/iso/Packages/Bigtera/
- 修改xxx.ks文件,将rpm包添加到对应group
ks文件%package部分一些理解
%packages --ignoremissing (%packages --- %end之间添加包安装的group或者rpm name)
@^bigtera (指定环境包组, 一定要和repodata/xx.xml <environment> id一样)
@core
@virtualstor (这里是安装core 和 virtualstor 包组,这里的名字要和xml <group> id 一致)
@group_name (安装指定的包组)
%end
可以看到repodate/xxx.xml里定义了两个group和一个environment
- 修改repodate/xxx.xml 元数据,将自定义包加入
这里我们是要加到自定义group virtualstor -- packagelist中
开始重新build kylin iso
- 重新编译repodate xml元数据
- mkisofs重新build iso
- 生成iso MD5并插入镜像
createrepo --xz -g repodata/bigtera-x86_64-comps.xml .
mkisofs -r -V "SUPERCLOUD SuperCloud 1.0" -cache-inodes -joliet-long -J -l -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -z -iso-level 4 -c isolinux/boot.cat -eltorito-alt-boot -e images/efiboot.img -no-emul-boot -o "SCloud-1.0-v8.0-157-kylin-v10-202212021405-cbf3cc9.iso" /mnt/iso_bak/iso/
implantisomd5 SCloud-1.0-v8.0-157-kylin-v10-202212021405-cbf3cc9.iso
验证新iso
- 安装过程省略
- 查看安装好的kylin 并check nmap是否已成功安装