如何將 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 上編輯這些圖像)。
我可以只 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/loop0p1
and/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 的可用空間,無需調整大小。