如何通过Linux命令行定制Ubuntu 22.04 arm64服务器版ISO以预安装.deb包
嗨,我来帮你搞定这个需求!要把.deb包提前塞进Ubuntu 22.04 arm64服务器版ISO里,避免每次用ISO都手动安装,咱们可以通过命令行一步步定制镜像,下面是实操指南:
1. 准备必要工具
首先得安装定制ISO需要的工具包,打开终端运行:
sudo apt update && sudo apt install -y xorriso squashfs-tools grub-efi-arm64-bin grub-pc-bin mtools
这些工具分别用来处理ISO镜像、squashfs文件系统、ARM64引导和磁盘镜像操作。
2. 创建工作目录并提取原始ISO内容
先创建几个目录用来存放临时文件,避免混乱:
mkdir -p ~/iso/custom ~/iso/mount ~/iso/squashfs
接着挂载你下载好的原始Ubuntu 22.04 arm64服务器版ISO(记得把路径换成你实际的ISO存放路径):
sudo mount -o loop ~/Downloads/ubuntu-22.04-server-arm64.iso ~/iso/mount
把挂载的ISO内容完整复制到定制目录:
sudo cp -rT ~/iso/mount ~/iso/custom
复制完成后卸载原始ISO:
sudo umount ~/iso/mount
3. 修改系统根文件系统(预安装.deb包)
Ubuntu的核心系统内容都在casper/filesystem.squashfs这个压缩文件里,咱们得挂载它并进行修改:
sudo mount -o loop ~/iso/custom/casper/filesystem.squashfs ~/iso/squashfs
把你要预安装的.deb包复制到挂载的根文件系统临时目录:
sudo cp ~/path/to/your/package.deb ~/iso/squashfs/tmp/
接下来进入chroot环境,模拟系统运行状态来安装包(这一步很关键,能保证包的依赖和系统环境匹配):
sudo mount --bind /dev ~/iso/squashfs/dev sudo mount --bind /proc ~/iso/squashfs/proc sudo mount --bind /sys ~/iso/squashfs/sys sudo chroot ~/iso/squashfs /bin/bash
进入chroot后,先更新源再安装你的.deb包,如果遇到依赖缺失的情况可以自动修复:
apt update dpkg -i /tmp/package.deb # 如果dpkg安装失败(比如依赖缺失),运行下面的命令自动修复: apt -f install -y
安装完成后,清理临时文件并退出chroot:
rm /tmp/package.deb exit
然后依次卸载绑定的系统目录和squashfs文件系统:
sudo umount ~/iso/squashfs/dev sudo umount ~/iso/squashfs/proc sudo umount ~/iso/squashfs/sys sudo umount ~/iso/squashfs
现在重新生成新的squashfs压缩文件,替换掉原来的文件:
sudo rm ~/iso/custom/casper/filesystem.squashfs sudo mksquashfs ~/iso/squashfs ~/iso/custom/casper/filesystem.squashfs -comp xz -b 1M
4. 更新ISO的文件列表和校验信息
为了让ISO能正确识别新的文件系统,需要更新casper目录下的文件列表和校验信息:
cd ~/iso/custom sudo rm casper/filesystem.manifest sudo chroot ~/iso/squashfs dpkg-query -W --showformat='${Package} ${Version}\n' > casper/filesystem.manifest sudo cp casper/filesystem.manifest casper/filesystem.manifest-desktop sudo sed -i '/ubiquity\|casper/d' casper/filesystem.manifest-desktop
然后计算新的文件系统大小(单位是MB),更新casper/filesystem.size:
sudo du -sx --block-size=1M ~/iso/squashfs | cut -f1 > casper/filesystem.size
5. 重新生成定制后的ISO镜像
最后用xorriso工具打包成新的ISO,注意ARM64的引导参数设置:
sudo xorriso -as mkisofs \ -r -V "Ubuntu 22.04 LTS Custom ARM64" \ -o ~/ubuntu-22.04-server-custom-arm64.iso \ -J -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/efi.img \ -no-emul-boot -isohybrid-gpt-basdat -isohybrid-apm-hfsplus \ ~/iso/custom
等命令执行完成,你就在用户目录下得到了定制好的ISO镜像ubuntu-22.04-server-custom-arm64.iso,用这个ISO安装系统时,你的.deb包就会自动预装在系统里了。
备注:内容来源于stack exchange,提问作者Alain Godo




