Coder Social home page Coder Social logo

rpi-image-generator's Introduction

Custom Debian Raspberry Pi image

This recipe raspi_4_bullseye.yaml contains the following edits from the master recipe:

  • eth0 interface not included - added later during configuration
  • python3 package installed on base image - required for Ansible
  • sysconf.txt supports defining static IP and gateway

The reason for the changes are to reduce manual steps when provisioning nodes for a Raspberry Pi cluster

See below the original documentation on how to generate images


Raspberry Pi image specs

This repository contains the files with which the images referenced at https://wiki.debian.org/RaspberryPiImages have been built.

Option 1: Downloading an image

See https://wiki.debian.org/RaspberryPiImages for where to obtain the latest pre-built image.

Option 2: Building your own image

If you prefer, you can build a Debian Raspberry Pi image yourself. If you are reading this document online, you should first clone this repository:

git clone --recursive https://salsa.debian.org/raspi-team/image-specs.git
cd image-specs

For this you will first need to install the following packages on a Debian Bullseye (11) or higher system:

  • binfmt-support
  • bmap-tools
  • debootstrap
  • dosfstools
  • fakemachine (optional, only available on amd64)
  • kpartx
  • qemu-utils
  • qemu-user-static
  • time
  • vmdb2 (>= 0.17)
  • python3
  • zerofree (because of #1021341)

To install these (as root):

   apt install -y vmdb2 dosfstools qemu-utils qemu-user-static debootstrap binfmt-support time kpartx bmap-tools python3 zerofree
   apt install -y fakemachine

If debootstrap still fails with exec format error, try running dpkg-reconfigure qemu-user-static. This calls /var/lib/dpkg/info/qemu-user-static.postinst which uses binfmt-support to register the executable format with /usr/bin/qemu-$fmt-static

This repository includes a master YAML recipe (which is basically a configuration file) for all of the generated images, diverting as little as possible in a parametrized way. The master recipe is raspi_master.yaml.

A Makefile is supplied to drive the build of the recipes into images. If fakemachine is installed, it can be run as an unprivileged user. Otherwise, because some steps of building the image require root privileges, you'll need to execute make as root.

The argument to make is constructed as follows: raspi_<model>_<release>.<result-type>

Whereby <model> is one of 1, 2, 3 or 4, <release> is either bullseye, bookworm, or trixie; and <result-type> is img or yaml.

Model 1 should be used for the Raspberry Pi 0, 0w and 1, models A and B. Model 2 for the Raspberry Pi 2 models A and B. Model 3 for all models of the Raspberry Pi 3 and model 4 for all models of the Raspberry Pi 4. So if you want to build the default image for a Raspberry Pi 3B+ with Bullseye, you can just issue:

   make raspi_3_bullseye.img

This will first create a raspi_3_bullseye.yaml file and then use that yaml recipe to build the image with vmdb2.

You can also edit the yaml file to customize the built image. If you want to start from the platform-specific recipe, you can issue:

make raspi_3_bullseye.yaml 

The recipe drives vmdb2, the successor to vmdebootstrap. Please refer to its documentation for further details; it is quite an easy format to understand.

Copy the generated file to a name descriptive enough for you (say, my_raspi_bullseye.yaml). Once you have edited the recipe for your specific needs, you can generate the image by issuing the following (as root):

vmdb2 --rootfs-tarball=my_raspi_bullseye.tar.gz --output \
my_raspi_bullseye.img my_raspi_bullseye.yaml --log my_raspi_bullseye.log

This is, just follow what is done by the _build_img target of the Makefile.

Installing the image onto the Raspberry Pi

Plug an SD card which you would like to entirely overwrite into your SD card reader.

Assuming your SD card reader provides the device /dev/mmcblk0 (Beware If you choose the wrong device, you might overwrite important parts of your system. Double check it's the correct device!), copy the image onto the SD card:

bmaptool copy raspi_3_bullseye.img.xz /dev/mmcblk0

Alternatively, if you don't have bmap-tools installed, you can use dd with the compressed image:

xzcat raspi_3_bullseye.img.xz | dd of=/dev/mmcblk0 bs=64k oflag=dsync status=progress

Or with the uncompressed image:

dd if=raspi_3_bullseye.img of=/dev/mmcblk0 bs=64k oflag=dsync status=progress

Then, plug the SD card into the Raspberry Pi, and power it up.

The image uses the hostname rpi0w, rpi2, rpi3, or rpi4 depending on the target build. The provided image will allow you to log in with the root account with no password set, but only logging in at the physical console (be it serial or by USB keyboard and HDMI monitor).

rpi-image-generator's People

Contributors

gwolf avatar diederikdehaas avatar cyrilbrulebois avatar dilinger avatar stapelberg avatar chschlue avatar a3nm avatar dijumx avatar liwfi avatar zvpunry avatar smcv avatar benpops89 avatar petelawler avatar chrisdecker1201 avatar gladk avatar aburch avatar frangal avatar jvalleroy avatar praseodym avatar prezu avatar rperier avatar weltraumschaf avatar gfa avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.