Apt

如何將 apt 包安裝到已掛載的系統映像中(img 文件)

  • January 9, 2021

我需要為多個 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 上編輯這些圖像)。

我可以只 chroot 到安裝圖像/分區的目錄並執行 apt install 嗎?

當然,只要您正確配置了系統。假設您將文件系統安裝在 Raspberry Pi 以外的其他設備上,您將需要 install qemu-arm-static,它用於在其他架構上執行 Raspberry Pi 二進製文件。

一旦該包被正確安裝和配置(應該由包自動處理),你可以chroot進入目標目錄:

# chroot /mnt/edited-raspbian.img/p2

請注意,對於典型的 Raspberry Pi Os(née Raspbian)映像,您需要將分區 1 掛載到/boot. 也就是說,如果您的樹莓派圖像顯示為/dev/loop0p1and /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“精簡版”映像只有 278MB 的可用空間,無需調整大小。

引用自:https://unix.stackexchange.com/questions/628371