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

如何修改Ubuntu等Linux ISO镜像,添加自定义Bash脚本实现安装后自动上报信息

如何修改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

火山引擎 最新活动