前言

        在日常产品交付中会有如下需求:

  1.   客户自己安装centos / ubuntu / kylin iso,然后我们把rpm包给到客户
  2.   我们直接将rpm包封装到iso,给客户交付整体iso,这样不管是对于客户还是对于公司都是最省心的,会避免很多因为系统包版本不一致导致的安装失败问题 

当前项目中的需求

  • 在代码中会用到nmap命令来判断远端服务器ip和port是否可用,如果部署集群很多,手动安装显然不是最佳选择
  • 所以我们需要将nmap-7.93-1.x86_64.rpm添加到kylin iso中,最终交付客户

给Kylin iso添加nmap rpm包 

  •  先看未添加nmap rpm包前直接安装kylin iso后,会报如下错误:

        

银河麒麟 arm 安装redis 银河麒麟 安装rpm_kylin

  •  先去官网找到nmap rpm包并copy到build 服务器
  •  mount iso 并copy iso里全部内容到新的目录 

         

银河麒麟 arm 安装redis 银河麒麟 安装rpm_linux_02

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
release V10(SP2)/(Sword)-x86_64-Build09/20210524

-----------------------------------------

.discinfo 系统的架构比如x86 or ARM

Kylin Linux Advanced Server
x86_64

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    

        

银河麒麟 arm 安装redis 银河麒麟 安装rpm_服务器_03

        

银河麒麟 arm 安装redis 银河麒麟 安装rpm_服务器_04

  •  修改repodate/xxx.xml 元数据,将自定义包加入

        这里我们是要加到自定义group virtualstor -- packagelist中

       

银河麒麟 arm 安装redis 银河麒麟 安装rpm_银河麒麟 arm 安装redis_05

 开始重新build kylin iso

  1.  重新编译repodate xml元数据
  2. mkisofs重新build iso
  3. 生成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是否已成功安装

        

银河麒麟 arm 安装redis 银河麒麟 安装rpm_kylin_06


iso完美添加自定义rpm包