Managing Raspberry Pi images

From Wildsong
Revision as of 23:06, 16 March 2024 by Brian Wilson (talk | contribs) (→‎Basic config file)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

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

Building for 32-bit bullseye

You need to switch to a different branch, this works,

git checkout remotes/origin/bullseye

Basic config file

RELEASE=bullseye
IMG_NAME=tarra_bullseye
TARGET_HOSTNAME=svxlink

WPA_COUNTRY=US
WPA_SSID=tarra
WPA_PASSWORD=tarra

ENABLE_SSH=1

LOCALE_DEFAULT=en_US.UTF-8
TIMEZONE_DEFAULT=Americas/Mountain
KEYBOARD_LAYOUT="English (US)"
KEYBOARD_KEYMAP=us

# leave the user "tarra" available                                                                                                                                 
DISABLE_FIRST_BOOT_USER_RENAME=1
FIRST_USER_NAME=tarra
FIRST_USER_PASS=XXXXXX

# Allow running in a emulator                                                                                                                                       
QEMU=1

# On Murre, use Bellman as an apt proxy when doing build_docker.sh                                                                                                 
# On Bellman, be the apt proxy (run "docker compose up -d")                                                                                                        
APT_PROXY=http://192.168.123.2:3142
     
STAGE_LIST="stage0 stage1 stage2"

On the "builder" machine in the pi-gen folder, I run "./build-docker.sh" and wait. I get a zipped 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, remove the docker container and (possibly edit config) and run the builder again.

docker rm -f pigen-work

Don't build everything!

Build a "lite" image only by touching some files.

touch stage3/SKIP stage4/SKIP stage5/SKIP stage3/SKIP_IMAGES stage4/SKIP_IMAGES stage5/SKIP_IMAGES

Building all 6 stages takes FOREVER and is useless for TARRA builds which is what we're doing here.

I am running it again with just a lite image and started it at 1638. Tick tock. All apt packages should be cached now. SO. How long? 1700. Great - takes about 20 minutes. This is acceptable.

Running arm images on Linux x64

You don't have to burn the image to an SD card, you can run it on Murre.

ARM8 (64 bit)

THERE IS NO QEMU KERNEL FOR BOOKWORM. STOP NOW.

ARM7 (32-bit)

Fortunately, this project (TARRA) has to use a 32-bit Bullseye image because of svxlink. So I should be able to run it in QEMU on Murre.

See https://github.com/dhruvvyas90/qemu-rpi-kernel and also perhaps this article.

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