You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过Linux命令行定制Ubuntu 22.04 arm64服务器版ISO以预安装.deb包

如何通过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

火山引擎 最新活动