From: Petter Reinholdtsen The
+vmdebootstrap
+program is a a very nice system to create virtual machine images. It
+create a image file, add a partition table, mount it and run
+debootstrap in the mounted directory to create a Debian system on a
+stick. Yesterday, I decided to try to teach it how to make images for
+Raspberry Pi, as part
+of a plan to simplify the build system for the FreedomBox project.
+The FreedomBox project already uses vmdebootstrap for the virtualbox
+images, but its home made multistrap based system for Dreamplug
+images, and it is lacking support for Raspberry Pi. Armed with the knowledge on how to build "foreign" (aka non-native
+architecture) chroots for Raspberry Pi, I dived into the vmdebootstrap
+code and adjusted it to be able to build armel images on my amd64
+Debian laptop. I ended up giving vmdebootstrap five new options,
+allowing me to replicate the image creation process I use to make
+Debian
+Jessie based mesh node images for the Raspberry Pi. First, the
+--foreign /path/to/binfm_handler option tell vmdebootstrap to
+call debootstrap with --foreign and to copy the handler into the
+generated chroot before running the second stage. This allow
+vmdebootstrap to create armel images on a amd64 host. Next I added
+two new options --bootsize size and --boottype
+fstype to teach it to create a separate /boot/ partition with the
+given file system type, allowing me to create an image with a vfat
+partition for the /boot/ stuff. I also added a --variant
+variant option to allow me to create smaller images without the
+Debian base system packages installed. Finally, I added an option
+--no-extlinux to tell vmdebootstrap to not install extlinux
+as a boot loader. It is not needed on the Raspberry Pi and probably
+most other non-x86 architectures. The changes were accepted by the
+upstream author of vmdebootstrap yesterday and today, and am now
+available from
+the
+upstream project page. To use it to build a Raspberry Pi image using Debian Jessie, first
+create a small script (the customize script) to add the non-free
+binary blob needed to boot the Raspberry Pi and the APT source
+list:
+#!/bin/sh
+set -e # Exit on first error
+rootdir="$1"
+cd "$rootdir"
+cat <
Next, fetch the latest vmdebootstrap script and call it like this +to build the image:
+ ++sudo ./vmdebootstrap \ + --variant minbase \ + --arch armel \ + --distribution jessie \ + --mirror http://http.debian.net/debian \ + --image test.img \ + --size 600M \ + --bootsize 64M \ + --boottype vfat \ + --log-level debug \ + --verbose \ + --no-kernel \ + --no-extlinux \ + --root-password raspberry \ + --hostname raspberrypi \ + --foreign /usr/bin/qemu-arm-static \ + --customize `pwd`/customize \ + --package netbase \ + --package git-core \ + --package binutils \ + --package ca-certificates \ + --package wget \ + --package kmod ++ +
The list of packages being installed are the ones needed by +rpi-update to make the image bootable on the Raspberry Pi, with the +exception of netbase, which is needed by debootstrap to find +/etc/hosts with the minbase variant.
+ +The build host need debootstrap, kpartx and qemu-user-static and +probably a few others installed. I have not checked the complete +build dependency list.
+ +The resulting image will not use the hardware floating point unit +on the Raspberry PI, because the armel architecture in Debian is not +optimized for that use. So the images created will be a bit slower +than Raspbian based images.