#切换root用户,减少后面使用 sudo 时输入密码的次数
sudo su
#基础镜像保存在 iso 目录里
mkdir iso
cd iso
mkdir oldiso
#挂载镜像
mount -o loop uos-v20-arm64.iso oldiso
#拷贝所有文件
cp -rvf oldiso newiso
#创建临时目录
mkdir squashfs-dir
#拷贝核心文件
cp oldiso/live/filesystem.squashfs squashfs-dir
#进入镜像核心文件所在临时目录
cd squashfs-dir
#解开镜像核心文件,解开后有一个同级目录下squashfs-root/目录
unsquashfs filesystem.squashfs
#切换到工作顶层目录
cd …/…/
#拷贝补丁文件到解开的镜像的顶层目录
cp /var/cache/apt/archives/*deb iso/suqashfs-dir/squashfs-root/
#切换到新解开的工作环境
cd iso/squashfs-dir/
chroot squashfs-root
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts
#安装补丁,逐个安装!!!确保每个软件安装成功
dpkg -i 补丁包
#安装完成后,删除软件包
rm -rf *deb
#退回到原宿主系统
umount /proc
umount /sys
umount /dev/pts
exit
#重新配置根文件系统
#更新镜像里的软件包列表
chroot squashfs-root dpkg-query -W --showformat=’
P
a
c
k
a
g
e
{Package}
Package{Version}\n’ >filesystem.manifest
#覆盖原来的软件包列表文件
cp -f filesystem.manifest …/newiso/live/
#删除列表里多余的软件名称
sed -i ‘/ubiquity/d’ …/newiso/live/filesystem.manifest
sed -i ‘/live/d’ …/newiso/live/filesystem.manifest
#删除原有的squashfs 文件
rm -rf …/newiso/live/filesystem.squashfs
#生成新的 suqashfs 文件(在此之前先确定/proc,/sys,/dev/pts都已经卸载完毕。如果提示无法卸载,尝试重启终端)
mksquashfs squashfs-root …/newiso/live/filesystem.squashfs -comp xz
#计算文件系统大小
printf $(du -sx --block-size=1 squashfs-root | cut -f1) > …/newiso/live/filesystem.size
#切换到 newiso 目录
cd …/newiso
#删除md5 计算结果
rm -f md5sum.txt
find -type f -print0 | xargs -0 md5sum | tee md5sum.txt
cd …
#重新制作 iso 镜像
#最后一个参数是新镜像数据所在目录 -o 指向的路径是输出ISO 镜像的路径和名称,-V 的参数可以自定义,建议与下面相同
mkisofs -r -T -J -joliet-long -allow-limited-size -m lost+found -m rr_moved -quiet -c boot.catalog -eltorito-alt-boot -eltorito-boot boot/grub/efi.img -no-emul-boot -V ‘uos-v20’ -sysid ‘LINUX’ -o ‘/home/ces/uos-v20-arm64.iso’ newiso/
#麒麟系统定制母盘和UOS区别在于部分目录名称不同,其他无差别。