% BRICKSTRAP(1) | User's Manual % David Lechner % August 2016
brickstrap - Create bootable disk images from Docker images
brickstrap create-tar <docker-image> <tar-file>
brickstrap create-image <tar-file> <image-file>
brickstrap add-beagle-bootloader <docker-image> <image-file>
brickstrap create-report <docker-image> <report-directory>
Brickstrap is a tool to create bootable disk images for embedded systems using Docker images. The creation of Docker images is outside of the scope of this manual. See https://docs.docker.com/engine/ for more info.
Note: Although "brick" is generally a bad word in the embedded world, the
"brick" in brickstrap comes from the fact that this tool was originally
developed to create image files for the LEGO MINDSTORMS EV3 programmable brick.
create-tar
: Creates a tar file from the docker image. This is not the same as docker export.
See DOCKER IMAGE below for details.
create-image
: Create a disk image from the tar file. Also see ENVIRONMENT for variables
that will affect the creation of the image.
add-beagle-bootloader
: Writes Beagle board bootloader files to the existing disk image. See BEAGLE
BOOTLOADER below for details.
create-report
: Creates a report from the docker image. See the DOCKER IMAGE section below
for details.
docker-image
: The name of a Docker image to be used as the source for creating a tar file.
The docker command is used, so if the image does not already exist on the
system, docker will attempt to download it. See DOCKER IMAGE below.
tar-file
: The name of the tar file. The create-tar command will create this file.
The create-image file uses this as the source.
image-file
: The name of the raw disk image file. The create-image command will create
this file. The add-beagle-bootloader command will modify this file.
report-directory : The directory where reports will be generated. This directory will be created if it does not already exist.
There are some special considerations that need to be taken into account when
creating the docker images. See https://github.com/ev3dev/docker-library for
a real-life example of how Docker images are created for use with brickstrap.
-
The
/brickstrap/directoryDocker images should contain a
/brickstrap/directory. This directory contains extra info that can be used during the creation of the Docker image. It is not included in the disk image that is created. -
Excluding files from the disk image
It is useful to exclude some files from the disk image. For example, most Docker images contain
/usr/sbin/policy-rc.dto prevent init scripts from running. If this is included in the disk image, the system probably won't boot.If the Docker image has
tar>= 1.28, files can be excluded by creating a.brickstrap-tar-excludefile in each directory that contains files to be excluded. This will be used by the--exclude-ignoreoption of thetarcommand. The.brickstrap-tar-excludefile contains a list of files to be ignored in the current directory.If the Docker image has
tar< 1.28, the file/brickstrap/_tar-excludewill be passed to the--exclude-fromoption of thetarcommand. This file contains a list of files to be ignored. Absolute paths must start with./in order to correctly match the file name. -
Adding extra files to the disk image
Sometimes, having a file in the Docker image can cause the Docker image to not work properly when using it in a Docker container. These files should be omitted from their proper place in the Docker image. Instead, these files should be placed in
/brickstrap/_tar-only/. This contents folder will be appended to the tar file when it is created. So, for example, the file/brickstrap/_tar-only/etc/my.confwill end up as/etc/my.confin the disk image. -
The
/boot/flash/directoryThis directory becomes the boot partition (FAT) of the disk image. Place any boot files here.
-
The
/brickstrap/_report/directoryAny executable files in this directory or its subdirectories will be run as part of the
brickstrap create-reportcommand. The files should save any reports to/brickstrap/_report/_out/(the_out/directory will be created automatically). TheBRICKSTRAP_DOCKER_IMAGE_NAMEenvironment variable will be set to docker-image when these commands are executed.
Beagle boards have a unique way of handling the bootloader files by placing them at specific locations in the disk image rather than using regular files. See http://elinux.org/Beagleboard:U-boot_partitioning_layout_2.0 for more information.
The add-beagle-bootloader command expects to find files named MLO and
u-boot.img in the /brickstrap/_beagle-boot/ directory in the Docker image.
The actual bootloader files are available from https://rcn-ee.com/repos/bootloader. You can find the latest stable BeagleBone bootloader by running:
wget https://rcn-ee.com/repos/bootloader/latest/bootloader-ng \
-q -O - | grep "ABI2:am335x_evm:"
The following environment variables are used by the create-image command.
BRICKSTRAP_IMAGE_FILE_SIZE
: This specifies the size of the disk image that is created. The default is
3800M (chosen to fit on any 4GB media - sometimes you don't get the full 4GB).
The FAT partition size is currently fixed at 48MB. See the guestfish man page
for allowable size suffixes and their definitions.
BRICKSTRAP_BOOT_PART_LABEL
: This specifies the boot partition label. The default is BOOT. Cannot exceed
11 characters. The characters ? / \ | . , ; : + = [ ] < > " are not allowed.
Lower case will be converted to upper case.
BRICKSTRAP_ROOT_PART_LABEL
: This specifies the root file system partition label. The default is ROOTFS.
Cannot exceed 16 characters.