如何将 apt 软件包安装到已安装的系统映像(img 文件)中

如何将 apt 软件包安装到已安装的系统映像(img 文件)中

我需要为多个 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 possiblydev . An easier solution is to usesystemd-nspawn`:

# systemd-nspawn -D /mnt/edited-raspbian.img

这将负责自动设置(和拆除)特殊目录。

根据您尝试安装的内容,您最终可能需要重新调整图像的大小。例如,Raspberry Pi OS“lite”映像在不调整大小的情况下只有 278MB 的可用空间。

相关内容