TIRED: Maintaining your fleet of raspberry pi devices by running commands and writing things on them ad-hoc and replicating by creating large, corruptible full disk clones with undocumented contents
WIRED: Maintaining your fleet of raspberry pi devices by generating disk images from one source concentrated enough to be self-documenting - a dockerfile, able to be built onto the latest version of an upstream base image
The resulting image is able to be flashed onto SD cards directly despite having been built through a Dockerfile. Building an SD image this way has an added benefit of automatically executing RUN commands in an appropriate emulator without needing to boot into the SD image directly (and e.g. triggering automatic partition expansion) to run them.
To run commands as pi root during image build, the host machine must be set up with binfmt_misc to run qemu for arm binaries
On ubuntu 22: apt install qemu-user-static
This package doesn't install binfmt_misc properly prior to ubuntu 22. Run
./binfmt_setup.sh if you're running an older version of ubuntu or debian.
Other distributions might require other packages or steps.
Another easy (but insecure) method to do this is to run the following command
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
See https://github.com/multiarch/qemu-user-static
Also requires python3 and docker
Move desired raspbian base disk image to file raspbian.img
./pidock.py <action>
[--host <hostname=raspberrypi>]
[--passwd <password=raspberry>]
[--dev <flash_device=/dev/mmcblk0>]
[--img <base_image=raspbian.img>]
Where action is one of the following
all - Does the same as the next four commands in order
extract - Extracts files from raspbian.img to run in docker
build - Builds docker image from extracted files and custom additions
compose - Creates custom.img from built docker image
flash - Flashes custom.img onto memory device (default: /dev/mmcblk0)
Use Dockerfile to build the pi's root as if it were a docker image. Example simply changes pi's password to that specified by --passwd instead of the normal 'raspberry'. And installs vim, because why not?
Files in boot-overlay and root-overlay will be copied onto their respective partition. For example, touching 'ssh' on the boot partition will cause raspbian to enable ssh.
An example wpa_supplicant.conf is provided; if copied into boot-overlay, raspbian will use its ssid/psk information and auto connect on first boot.
Note: currently requires sudo access to work around multiple permission issues
standard_init_linux.go:211: exec user process caused "exec format error"
Your binfmt_misc isn't set up correctly and docker is unable to run an ARM binary
No space left on device
Export CUSTOM_IMG_SIZE={Size in MiB of output image file} larger, default 4096 (4GiB)
Erin Hensel <[email protected]>