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包
{自定义包组的groupid}
My Dependencies
true
true
python-webob
......
#根据rpms_list.txt拼接packagereq
#!/bin/sh
for line in `cat rpms_list.txt`
do
echo " "$line"" >> /root/package.txt
done
#在指定的环境中添加定制的groupid
web-server-environment
Basic Web Server
Server for serving static and dynamic internet content.
30
base
core
web-server
{自定义包组的groupid}
#切换到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