Managing Raspberry Pi images
Creating SD cards
There is a Windows program that some people use but I only use the Raspberry Pi imager, or sometimes Balena Etcher.
Copy IMG
Mick warns that pi-shrink is unreliable. Here it is all the same.
https://www.instructables.com/How-to-BackUp-and-Shrink-Your-Raspberry-Pi-Image/
I did this on Bellman and worked there I think. I think. Did I make notes?
sudo apt install dcfldd gparted
Building new images with pi-gen
pi-gen is what the Raspberry Pi folk use. See /boot/issue.txt on a standard image. For example,
Raspberry Pi reference 2023-12-11 Generated using pi-gen, https://github.com/RPi-Distro/pi-gen, 2acf7afcba7d11500313a7b93bb55a2aae20b2d6, stage2
I have to run pi-gen on an x64 computer; I tried on a Pi5 and it would not run. I use the Docker version. I use Murre as my build machine, and I run an apt cache on Bellman to speed up repeated builds. I set up a pi-gen folder (on both Murre and Bellman).
You have to download pi-gen and you have to install the apt package "qemu-user-static" so that you can build arm64 images. You probably only need qemu on the builder not the cacher.
cd ~/Documents/Projects/TARRA git clone https://github.com/RPI-Distro/pi-gen.git cd pi-gen
In the "config" file on each machine I added "APT_PROXY=http://192.168.123.2:3142"; this tells the copy on Bellman to be a cache when I run "docker compose up -d" and it tells the builder on Murre to use Bellman as the cache. This means I can run a cache on the server and build on the fast machine, or I can build on Bellman remotely.
On the "builder" then in the pi-gen folder, I run "./builder-docker.sh" and wait. Eventually I get an img file in the deploy/ folder. From the console then I can burn the image using the Raspberry Pi imager to an SD Card or an NVME drive. The image will be named after the name in the config and today's date, for example, 2024-03-10-tarra.img
To build again, you remove the docker container and (possibly edit config) and run the builder again.
Don't build everything!
Build a "lite" image by removing stage 3 (Desktop) and stage 4 (extras including documentation) -- make a STAGE_LIST in the config. You can build a minimal image (boots and that's about it) by just doing stages 0,1, and 5.
STAGE_LIST="stage0 stage1 stage2 stage5" # Build a "lite" image, wifi+bt but no desktop, no docs
Building all 6 stages takes FOREVER and is useless for TARRA builds which is what we're doing here. It seems to build initramfs everytime I look over there. Not sure why.
Running arm64 image on Linux x64
You don't have to burn the image to an SD card, you can run it on Murre. See https://github.com/dhruvvyas90/qemu-rpi-kernel and also perhaps this article. First, install...
sudo apt-get update && sudo apt-get install qemu-system-arm qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virtinst libvirt-daemon virt-manager git clone https://github.com/dhruvvyas90/qemu-rpi-kernel
# customize the bold parts sudo virsh --connect=qemu:///system net-start default sudo virt-install \ --name rpios --arch armv6l --machine versatilepb \ --cpu arm1176 --vcpus 1 --memory 256 --import \ --disk 2021-01-11-raspios-buster-armhf-lite.img,format=raw,bus=virtio \ --network bridge,source=virbr0,model=virtio \ --video vga --graphics spice \ --boot 'dtb=qemu-rpi-kernel/versatile-pb-buster.dtb,kernel=qemu-rpi-kernel/kernel-qemu-4.19.50-buster,kernel_args=root=/dev/vda2 panic=1' \ --events on_reboot=destroy
I put the long command in a file of course, called start_qemu.sh