我需要为多个 Raspberry Pi 设备编辑/准备基于 debian 的 Raspbian 系统映像。
到目前为止,我的修改包括添加或更改现有的配置文件。
我写了这样的脚本(从 img 文件挂载分区):
IMGFILE='edited-raspbian.img'
MNTDIR='/mnt/'$IMGFILE'/'
LOOPDEVICE=$(sudo losetup -f)
sudo losetup -P $LOOPDEVICE $IMGFILE
PARTITIONS=$(sudo fdisk -l $LOOPDEVICE | grep $LOOPDEVICE'*p' | cut -d$' ' -f 1 | cut -d$'/' -f 3)
while IFS= read -r PARTITION; do
MNTDIRPART=$MNTDIR'/'${PARTITION: -2}
sudo mkdir -p $MNTDIRPART
sudo mount "/dev/$PARTITION" "$MNTDIRPART"
done <<< "$PARTITIONS"
运行它后,我会看到并编辑目录中映像的“/”和“/boot”分区:
/mnt/edited-raspbian.img/p1
/mnt/edited-raspbian.img/p2
我的问题是:
如何将 apt 软件包安装到“图像中”?
我可以仅 chroot 到/
安装并运行映像分区的目录apt install
吗?
为了简化一切,我可以使用 Raspbian 在 Raspberry Pi 上工作(通常我在最新的 Debian 上编辑这些图像)。
答案1
我可以 chroot 到安装映像/分区的目录并运行 apt install 吗?
当然,只要您正确配置了系统。假设您将文件系统安装在 Raspberry Pi 以外的其他设备上,则需要安装qemu-arm-static
,它用于在其他架构上运行 Raspberry Pi 二进制文件。
一旦正确安装和配置了该软件包(该软件包应该自动为您处理),您就可以chroot
进入目标目录:
# chroot /mnt/edited-raspbian.img/p2
请注意,对于典型的 Raspberry Pi Os(née Raspbian)映像,您需要将分区 1 挂载到/boot
.也就是说,如果您的树莓派镜像暴露为/dev/loop0p1
和/dev/loop0p2
,您通常会:
# mount /dev/loop0p2 /mnt/edited-raspbian.img
# mount /dev/loop0p1 /mnt/edited-raspbian.img/boot
使用起来有一些缺点chroot
;您可能需要手动挂载/proc
/ /sys, and possibly
dev . An easier solution is to use
systemd-nspawn`:
# systemd-nspawn -D /mnt/edited-raspbian.img
这将负责自动设置(和拆除)特殊目录。
根据您尝试安装的内容,您最终可能需要重新调整图像的大小。例如,Raspberry Pi OS“lite”映像在不调整大小的情况下只有 278MB 的可用空间。