如何修改Ubuntu等Linux ISO镜像,添加自定义Bash脚本实现安装后自动上报信息
当然可以做到!我之前也折腾过类似的需求,就是给Ubuntu ISO加个自定义脚本,让系统安装完成后自动通知管理服务器。下面一步步来教你怎么操作:
1. 准备必要工具
首先得安装处理ISO镜像的工具,在Ubuntu上直接用apt装就行:
sudo apt update && sudo apt install xorriso rsync isolinux -y
2. 提取原ISO的内容到本地目录
先创建两个工作目录,一个用来挂载原ISO,一个用来存放提取后的文件:
mkdir -p ~/iso-mount ~/iso-work
然后挂载你要修改的Ubuntu ISO(这里假设原ISO叫ubuntu.iso,记得替换成你的实际文件名):
sudo mount -o loop ubuntu.iso ~/iso-mount
把挂载的ISO内容同步到工作目录,这样我们就能自由修改里面的文件了:
rsync -av ~/iso-mount/ ~/iso-work/
最后卸载挂载的ISO:
sudo umount ~/iso-mount
3. 添加自定义的安装后脚本
在工作目录里创建一个专门放自定义脚本的文件夹,比如custom:
mkdir ~/iso-work/custom
然后创建你的上报脚本post-install.sh:
nano ~/iso-work/custom/post-install.sh
把下面的内容粘贴进去,记得把http://your-master-server/upload-endpoint换成你主服务器的实际上传地址:
#!/bin/bash # 生成包含主机名和IP的信息文件 INSTALL_INFO="/root/installed_$(hostname)" echo "I'm now installed, ip is $(ip route get 1.1.1.1 | awk '{print $7}')" > "$INSTALL_INFO" # 上传文件到主服务器 curl -X POST -T "$INSTALL_INFO" http://your-master-server/upload-endpoint # 可选:上传完成后删除本地文件 rm -f "$INSTALL_INFO"
给脚本加上执行权限:
chmod +x ~/iso-work/custom/post-install.sh
4. 配置Ubuntu安装流程,让它执行这个脚本
Ubuntu的安装器支持late_command参数,这个命令会在系统安装完成、重启之前执行。我们需要把这个配置加到安装的预置文件里:
方法1:修改preseed配置(适合传统Ubuntu Server)
如果你的ISO是传统的Ubuntu Server(基于debian-installer),找到iso-work/preseed/ubuntu-server.seed,在文件末尾添加:
cp /cdrom/custom/post-install.sh /target/root/; \ chmod +x /target/root/post-install.sh; \ in-target /root/post-install.sh
方法2:修改autoinstall配置(适合Ubuntu 20.04+ Server)
如果是新版Ubuntu Server(用cloud-init自动安装),可以创建iso-work/user-data文件,添加以下内容:
#cloud-config autoinstall: late-commands: - cp /cdrom/custom/post-install.sh /target/root/ - chmod +x /target/root/post-install.sh - curtin in-target -- /root/post-install.sh
同时要确保iso-work/meta-data文件是空的(如果没有就创建一个空文件):
touch ~/iso-work/meta-data
5. 重新生成自定义ISO镜像
现在我们把修改后的文件打包成新的ISO,用xorriso命令,要保证新ISO和原ISO一样能正常引导:
cd ~/iso-work xorriso -as mkisofs -r -V "Custom Ubuntu Installer" \ -J -joliet-long -cache-inodes \ -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \ -b isolinux/isolinux.bin -c isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table \ -o ~/custom-ubuntu-installer.iso .
执行完后,~/custom-ubuntu-installer.iso就是你修改好的自定义ISO了。
6. 测试验证
把这个新ISO放到虚拟机或者物理机上安装,等安装完成后,检查主服务器是否收到了上报的文件。如果没成功,可以排查以下几点:
- 主服务器的上传接口是否正常,防火墙有没有开放对应端口
- 脚本里的IP提取命令是否适配你的网络环境(如果
ip route get 1.1.1.1输出不对,可以换成hostname -I | awk '{print $1}') - ISO里的脚本路径是否正确,
late_command的配置有没有写错
备注:内容来源于stack exchange,提问作者Saeed




