自定义CentOS7镜像

1、重构squashfs

[root@localhost LiveOS]# yum -y install squashfs-tools

[root@localhost img]# unsquashfs squashfs.img   #由于squashfs.img只读,需拷贝出来进行解压
[root@localhost LiveOS]# ls
rootfs.img
[root@localhost LiveOS]# pwd
/data/img/squashfs-root/LiveOS
[root@localhost LiveOS]# mount rootfs.img /data/rootfs/ #将rootfs.img 挂载到目录
[root@localhost LiveOS]# cd /data/rootfs/
[root@localhost rootfs]# ls
bin  boot  dev  etc  firmware  lib  lib64  lost+found  mnt  modules  proc  root  run  sbin  sys  tmp  usr  var

[root@localhost rootfs]# find . -name mdadm*
./run/mdadm
./usr/lib/systemd/system-shutdown/mdadm.shutdown
./usr/lib/systemd/system/mdadm-last-resort@.service
./usr/lib/systemd/system/mdadm-grow-continue@.service
./usr/lib/systemd/system/mdadm-last-resort@.timer
./usr/lib/tmpfiles.d/mdadm.conf
./usr/share/augeas/lenses/dist/mdadm_conf.aug
./usr/sbin/mdadm
[root@localhost ~]# yum provides rpmbuild #查看命令是哪个包提供的
[root@localhost x86_64]# rpm2cpio mdadm-3.3.2-2.el7.1.x86_64.rpm |cpio -div #RPM包是使用cpio格式打包的,因此可以先转成cpio然后解压
[root@localhost rootfs]# cp /root/rpmbuild/RPMS/x86_64/usr/sbin/mdadm sbin/mdadm #替换文件
[root@localhost rootfs]# mksquashfs squashfs-root squashfs.img #重新打包生成squashfs.img

[root@node1 elk]# mkdir ISO
[root@node1 elk]# yum -y install createrepo mkisofs isomd5sum rsync
[root@node1 elk]# rsync -a --exclude=Packages/ --exclude=repodata/ /mnt/ ISO/  #建议全复制过去
[root@node1 elk]# yum install -y --downloadonly --downloaddir=/root/test/ #安装指定rpm包到指定路径,不安装

#重新生成软件包树,每次新增或者删减都需要执行
createrepo  -g  repodata/*-comps.xml  . 
#制作镜像
mkisofs -o CentOS.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4  -boot-info-table -R -J -v -T .

2、自定义镜像

mount /dev/cdrom /media
#同步/media下的文件到/ISO路径下,除了Packages和repodata文件夹
/usr/bin/rsync -a --exclude=Packages/ --exclude=repodata/ /media/ /ISO/
# 在/ISO/文件夹下新建Packages和repodata文件夹
mkdir -p /ISO/{Packages,repodata}
rpm -qa >> /root/install.log # 生成install.log
awk '{print $0}'  /root/install.log |xargs -i cp /media/Packages/{}.rpm /ISO/Packages/

配置yum下载指定软件包列表(rpms_list.txt)的所有依赖包

#!/bin/sh   
for line in `cat /root/rpms_list.txt`
    do
       echo "download file>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>and it's denpendies"$line
     yum install -y --downloadonly --downloaddir=/root/test/ $line
#或者先安装yum -y install yum-utils再yumdownloader $line
    done
#yum查找.so或者某个依赖在哪个rpm包中
yum provides {.so名或者依赖名字}
#拷贝包到指定目录
cp /root/test/* /ISO/Packages/

自定义isolinux.cfg文件

default 1
prompt 1 #回车会走默认项,防止反复重装
timeout 600

label 1
menu label ^Install Console
kernel vmlinuz
append linux initrd=initrd.img inst.nosave=all inst.stage2=hd:LABEL=OS inst.ks=hd:LABEL=OS:/ks.cfg inst.text console=ttyS0,115200n8  nomodeset

label 2
menu label ^Install Screen
kernel vmlinuz
append linux initrd=initrd.img inst.nosave=all inst.stage2=hd:LABEL=OS inst.ks=hd:LABEL=OS:/ks.cfg inst.text  nomodeset
menu end

#inst.ks为ks.cfg文件位置;
#inst.stage2为安装介质位置,hd:LABEL为介质标签,例如CentOS7。这个和后续生成ISO镜像文件的命令genisoimage的参数-V有关。
#最好是把所有hd:LABEL后面的值都替换为一个后面会用到的字符串,如CentOS7

修改自动化安装配置文件

%packages
@^web-server-environment
@base
@core
@java-platform
@python-web
@web-server
kexec-tools
@{自定义包组的groupid}
%end

制作修改comps文件

#进入/ISO目录,将“*-x86_64-comps.xml”文件拷贝到/ISO/repodata路径下,并重命名成comps.xm
cp /media/repodata/*-x86_64-comps.xml  /ISO/repodata/comps.xml
#添加定制rpm包
<group>
    <id>{自定义包组的groupid}</id>
    <name>My Dependencies</name>
    <default>true</default>
    <uservisible>true</uservisible>
    <packagelist>
        <packagereq type="default">python-webob</packagereq>
        ......
    </packagelist>
</group>

#根据rpms_list.txt拼接packagereq
#!/bin/sh
for line in `cat rpms_list.txt`
    do
        echo " <packagereq type=\"default\">"$line"</packagereq>" >> /root/package.txt
    done
    
#在指定的环境中添加定制的groupid  
    <environment>
        <id>web-server-environment</id>
        <name>Basic Web Server</name>
        <description>Server for serving static and dynamic internet content. </description>
        <display_order>30</display_order>
        <grouplist>
          <groupid>base</groupid>
          <groupid>core</groupid>
          <groupid>web-server</groupid>
          <groupid>{自定义包组的groupid}</groupid>
        </grouplist>
    </environment>
    
#切换到ISO/路径下,由comps.xml生成repodata包。注意当有新包加入,或者更新comps.xml文件,均需要重新生成repodata文件夹
createrepo -g repodata/comps.xml ./

制作ISO镜像

#制作ISO镜像,注意参数中的-V,和上面的isolinux.cfg中的lable需要一致
cd /ISO
genisoimage -joliet-long -V CentOS7 -o CentOS.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

#校验镜像MD5值
implantisomd5 /ISO/CentOS.iso
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容