Managing Raspberry Pi images: Difference between revisions

From Wildsong
Jump to navigationJump to search
Brian Wilson (talk | contribs)
Brian Wilson (talk | contribs)
 
(2 intermediate revisions by the same user not shown)
Line 30: Line 30:
</pre>
</pre>


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.
=== Building for 32-bit bullseye ===
You need to switch to a different branch, this works,
git checkout remotes/origin/bullseye


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'''
=== Basic config file ===


To build again, you remove the docker container and (possibly edit config) and run the builder again.  
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! ====
==== Don't build everything! ====
Line 43: Line 77:
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.
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 arm64 image on Linux x64 ==
== Running arm images on Linux x64 ==
'''THERE IS NO KERNEL FOR BOOKWORM SO I AM NOT DOING THIS TODAY.'''
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.


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 [https://linuxconfig.org/how-to-run-the-raspberry-pi-os-in-a-virtual-machine-with-qemu-and-kvm this article]. First, install...
See https://github.com/dhruvvyas90/qemu-rpi-kernel and also perhaps [https://linuxconfig.org/how-to-run-the-raspberry-pi-os-in-a-virtual-machine-with-qemu-and-kvm 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  
  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 <nowiki>https://github.com/dhruvvyas90/qemu-rpi-kernel</nowiki>
  git clone <nowiki>https://github.com/dhruvvyas90/qemu-rpi-kernel</nowiki>

Latest revision as of 23:06, 16 March 2024

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