如何编写自动化脚本制作自定义Ubuntu 24 Server树莓派4可启动镜像
如何编写自动化脚本制作自定义Ubuntu 24 Server树莓派4可启动镜像
我完全理解你想要打造一个比Raspberry Pi Imager更灵活的自定义镜像工具——把预装了ROS、专属工具的Ubuntu 24 Server打包成可启动的img.xz,确实比直接dd官方镜像实用多了。下面我就一步步帮你理清思路和具体操作:
一、前期准备
- 下载官方Ubuntu 24 Server for Raspberry Pi的ARM64镜像(对应树莓派4的版本)
- 安装必要工具:
sudo apt update && sudo apt install qemu-user-static losetup parted xz-utils -y
二、挂载基础镜像并进入定制环境
将镜像挂载为循环设备:
sudo losetup -fP ubuntu-24.04-server-arm64.img执行后可以用
losetup -l查看生成的循环设备,比如/dev/loop0挂载启动分区和根分区:
先查看分区表确认分区编号:sudo parted -l /dev/loop0通常第一个分区(loop0p1)是FAT32格式的
/boot,第二个(loop0p2)是ext4格式的/root。创建临时挂载点并挂载:sudo mkdir -p /tmp/pi-boot /tmp/pi-root sudo mount /dev/loop0p1 /tmp/pi-boot sudo mount /dev/loop0p2 /tmp/pi-root进入ARM模拟的chroot环境:
把qemu的ARM静态二进制复制到根分区,让x86机器能运行ARM程序:sudo cp /usr/bin/qemu-aarch64-static /tmp/pi-root/usr/bin/为了让chroot环境更完整,可以挂载必要的系统文件系统:
sudo mount -t proc proc /tmp/pi-root/proc sudo mount -t sysfs sys /tmp/pi-root/sys sudo mount -o bind /dev /tmp/pi-root/dev然后进入chroot:
sudo chroot /tmp/pi-root /bin/bash
三、定制你的系统
现在你就像在真实的树莓派系统里操作了,可以完成这些定制:
- 安装ROS及依赖(比如适配Ubuntu 24.04的ROS 2 Jazzy):
sudo apt update && sudo apt install ros-jazzy-desktop -y echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc - 安装自定义工具:
sudo apt install git vim htop tmux -y - 复制你的工作文件:可以在chroot前把本地文件复制到
/tmp/pi-root/opt/目录下,然后在chroot里调整权限或路径 - 配置系统:比如开启SSH服务、设置默认用户密码、调整网络参数等
- 清理冗余文件以减小镜像体积:
sudo apt clean && sudo apt autoremove -y
完成后退出chroot:exit
四、处理启动分区(可选)
官方镜像的启动分区已经适配树莓派4,一般不需要修改。如果需要自定义启动参数(比如启用串口控制台),可以编辑/tmp/pi-boot/cmdline.txt,添加console=ttyAMA0,115200之类的参数。
五、卸载挂载并打包成img.xz
- 先卸载所有挂载的文件系统:
sudo umount /tmp/pi-root/proc /tmp/pi-root/sys /tmp/pi-root/dev sudo umount /tmp/pi-boot /tmp/pi-root sudo losetup -d /dev/loop0 - 用xz压缩镜像,可选压缩级别(-9为最高压缩,速度较慢):
完成后就得到了xz -9 ubuntu-24.04-server-arm64.imgubuntu-24.04-server-arm64.img.xz,可以直接用来烧录到SD卡或USB设备。
六、环境选择:本地x86机器还是树莓派?
- 优先选本地x86/AMD64机器:安装
qemu-user-static后就能模拟ARM环境,编译和安装软件的速度比树莓派快很多,而且不会占用树莓派的资源,操作也更安全(只要你别误挂载自己的系统分区)。 - 树莓派本地制作:不需要qemu,但速度慢,内存不足时可能会出现安装失败的情况,适合没有x86机器的场景。
一些额外注意事项
- 操作前务必备份原始镜像,避免误操作导致需要重新下载
- 如果定制过程中遇到网络问题,可以在chroot前把本地的
resolv.conf复制到/tmp/pi-root/etc/,解决DNS解析问题:sudo cp /etc/resolv.conf /tmp/pi-root/etc/resolv.conf
备注:内容来源于stack exchange,提问作者Teemo225
相关产品推荐
相关产品推荐

