我正在尝试在 Docker 虚拟机下自动创建 Raspberry Pi 映像,以便在CI
bitbucket-pipelines 等常见系统中运行它。
在物理系统上,我使用“模板”映像,将其分区安装到本地目录,然后用脚本填充它并卸载。为了安装它,我使用如下脚本:
loopdevice=`losetup -f --show -P images/template.img`
echo $loopdevice > loopdevice
mkdir -p images/p1
mkdir -p images/p2
mkdir -p images/p3
mount ${loopdevice}p1 images/p1
mount ${loopdevice}p2 images/p2
mount ${loopdevice}p3 images/p3
(镜像包含3个分区,分别挂载到3个目录)。
不幸的是,如果没有特权,我无法在 Dcoker 容器内使用环回设备,并且我无法使其在 Bitbucket 管道内获得特权。我在这里看到了死胡同。
那么,问题是:是否有任何 Linux 工具可以操作文件系统映像文件而不将它们挂载到环回设备?
答案1
答案2
我使用并推荐guestfish
,这是一部分libguestfs,用于访问和修改虚拟机磁盘映像的库。
我发现 OpenStack 的文档包含不需要特权的工具的有用描述:修改镜像 — Virtual Machine Image Guide 文档
请注意,如果您要进行许多不相交的更改,您可能会受益于运行guestfish
守护进程并使用其远程控制模式 - 这可以节省(并非微不足道的)启动时间。
看guestfish
通过插座进行远程控制手册的内容guestfish
。