定制银河麒麟ISO
0. 应用场景
目前很多整机厂商都会进行操作系统出厂预装,并根据项目或环境需求在操作系统中定制安装一些补丁以及软件或配置,且在规模较大的环境中需要进行 PXE 安装,故以下介绍下如何定制化制作出厂 ISO。
此文档使用基础操作系统版本:Kylin-Desktop-V10-Release-Build1-20200710-arm64.iso,下文中简称为基础版本。
注:U 系(Ubuntu 系列)操作系统同样适用此方法。
1. 创建目录
cd /root
mkdir mnt live tool iso deb
创建目录用途:
-
mnt:作为镜像挂载目录 -
live:作为工作目录 -
tool:作为工具目录 iso: 作为导出镜像目录deb:作为软件安装包存放位置
2. 上传定制系统基础镜像至 /root/tool 中,并挂载至 mnt
将基础镜像拷贝到/root/tool文件夹中
cp /home/user/桌面/Kylin-Desktop-V10-Release-Build1-20200710-arm64.iso /root/tool
将需要的安装包复制到/root/deb文件夹中
cp /home/user/桌面/deb/*.deb /root/deb
将镜像挂载至/root/mnt
mount /root/tool/Kylin-Desktop-V10-Release-Build1-20200710-arm64.iso /root/mnt
3. 复制镜像中所有文件至 live 下
cp -rp /root/mnt/. /root/live
4. 取消挂载
umount /root/mnt
5. 解压 filesystem.squashfs
cd /root/live/casper
unsquashfs filesystem.squashfs
解压后目录为:squashfs-root。
6. 切换至新系统中(chroot)
chroot squashfs-root
mount -t proc none /proc # 把 proc 这个虚拟文件系统挂载到 /proc 目录
mount -t sysfs none /sys
mount -t devpts none /dev/pts
7. 定制化操作系统
可根据自身需求进行定制,如:升级更新软件包、安装第三方软件、修改配置等。
7.1 软件源更新
先退出 squashfs-root ** 系统:**
exit
复制宿主机的源与 DNS 到 chroot 系统:
cd /root/live/casper
cp /etc/apt/sources.list /root/live/casper/squashfs-root/etc/apt/sources.list
cp /etc/resolv.conf /root/live/casper/squashfs-root/etc/resolv.conf
cp /root/deb/*.deb ./squashfs-root/tmp
再次进入 squashfs-root :
chroot squashfs-root
cd /tmp
dpkg -i *.deb
apt update
可使用源更新系统或安装第三方软件等。
7.2 设置开机启动shell脚本(可选)
sudo vim /lib/systemd/system/rc-local.service
在文件最下面添加以下代码
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
保存之后输入
sudo vim /etc/rc.local
在rc.local中添加需要的代码格式如下:
#!/bin/sh
# 这里添加要开机执行的脚本和命令等等
exit 0
保存之后,添加可执行权限
:sudo chmod +x /etc/rc.local
创建软链接及生效
sudo ln-s /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service
7.3 完成配置,清除系统
apt-get clean
apt-get autoremove
rm -rf /tmp/*
umount /proc
umount /sys
umount /dev/pts
history -c
history -w
exit
8. 重新配置并压缩根文件系统
cd /root/live/casper
删除原来的操作系统压缩文件:
rm -rf filesystem.squashfs
重新压缩操作系统:
mksquashfs squashfs-root filesystem.squashfs -comp xz
更新大小(filesystem.size ):
printf $(du -sx --block-size 1 squashfs-root | cut -f1) > filesystem.size
删除解压目录:
rm -rf squashfs-root
更新 md5 值:
cd /root/live
rm md5sum.txt
find -type f -print0 | xargs -0 md5sum | grep -v isolinux/boot.cat | tee md5sum.txt
9. 制作定制 ISO 镜像
mkisofs -r -T -J -joliet-long \
-allow-limited-size \
-quiet \
-c boot.catalog \
-eltorito-alt-boot \
-e boot/grub/efi.img \
-no-emul-boot \
-V 'Kylin-Desktop-V10-SP1' \
-sysid 'LINUX' \
-o '/root/iso/Kylin-Desktop-V10-SP1-2303-ARM64_v1.iso' \
/root/live
-V:为 ISO 挂载后显示名称-o:第一个参数为定制镜像生成位置及名称,第二个参数为工作目录
通过上面的命令生成的 ISO 即可以采用 UEFI 的方式进行安装,也可以采用 Legacy 的方式进行安装。
附:mkisofs 参数及用法简表
-a/--all:通常不处理备份文件,使用此参数可将备份文件加入映像。-A <应用程序ID>/-appid <应用程序ID>:指定光盘的应用程序 ID。-abstract <摘要文件>:指定摘要文件名。-b <开机映像文件>/-eltorito-boot <开机映像文件>:制作可启动光盘时指定启动映像。-biblio <ISBN文件>:指定记录光盘 ISBN 的文件名(位于根目录)。-c <开机文件名称>/-eltorito-catalog <开机文件名称>:制作可启动光盘时建立启动目录文件。-C <盘区编号,盘区编号>:将多个节区合成一个映像文件时使用。-copyright <版权信息文件>:指定版权信息文件名。-d/-omit-period:省略文件名末尾的句号。-D/-disable-deep-relocation:关闭超过 8 层目录时的自动兼容处理。-f/-follow-links:忽略符号链接。-h:显示帮助。-hide <目录或文件名>:在 ISO9660/RRIP 系统中隐藏指定路径。-hide-joliet <目录或文件名>:在 Joliet 中隐藏指定路径。-J/-joliet:使用 Joliet 格式的目录与文件名称。-l/-full-iso9660-filenames:使用 ISO9660 的 32 字符长度文件名。-L/-allow-leading-dots:允许文件名首字符为句号。-log-file <记录文件>:将错误信息写入指定文件。-m <目录或文件名>/-exclude <目录或文件名>:排除指定路径。-M <映像文件>/-prev-session <映像文件>:与指定映像文件合并。-N/-omit-version-number:省略 ISO9660 文件的版本信息。-o <映像文件>/-output <映像文件>:指定输出映像文件名。-p <数据处理人>/-preparer <数据处理人>:记录数据处理人。-print-size:显示预估的文件系统大小。-quiet:静默执行。-r/-rational-rock:启用 Rock Ridge 扩展并开放全部文件读取权限。-R/-rock:使用 Rock Ridge 扩展。-sysid <系统ID>:指定光盘的系统 ID。-T/-translation-table:建立文件名转换表。-v/-verbose:显示详细信息。-V <光盘ID>/-volid <光盘ID>:指定卷册集 ID。-volset-size <光盘总数>:指定卷册集光盘张数。-volset-seqno <卷册序号>:指定卷册集中本片编号。-x <目录>:排除指定目录。-z:建立通透性压缩文件的 SUSP 记录(限特定平台)。
V10 不同架构示例命令
V10 x86 结构
mkisofs -J -r -V 'Kylin-Desktop-V10-Lenovo' -cache-inodes -l -b \
isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 \
boot-info-table -eltorito-alt-boot -e boot/grub/efifi.img -no-emul-boot \
-o /opt/Test.iso .
V10 arm 结构
mkisofs -r -T -J -joliet-long \
-allow-limited-size \
-quiet \
-c boot.catalog \
-eltorito-alt-boot \
-e boot/grub/efi.img \
-no-emul-boot \
-V 'Kylin-Desktop-V10-SP1' \
-sysid 'LINUX' \
-o '/root/iso/Kylin-Desktop-V10-SP1-2303-ARM64_v1.iso' \
/root/live
V10 mips 结构
mkisofs -b casper/initrd.img -no-emul-boot \
-T -J -R -c boot.catalog -hide boot.catalog -V "V10-desktop-mips64el" \
-o /opt/V10-desktop-mips64el.iso .
评论区