Skip to content
Branch: master
Find file Copy path
Find file Copy path
3 contributors

Users who have contributed to this file

@smoser @hrw @nowster
70 lines (54 sloc) 2.62 KB
This is a project to build a small cloud image that has useful tools and
function for debugging or developing cloud infrastructure.
The following works on Ubuntu 18.04 LTS, running on x86_64. Native building
for other architectures is not recommended.
To use it, you would do something like:
* get the build dependencies:
$ ./bin/system-setup
* git clone
git clone git://
git clone git+ssh://
* cd cirros
* download buildroot and setup environment
$ br_ver="2019.02.1"
$ mkdir -p ../download
$ ln -snf ../download download
$ ( cd download && wget${br_ver}.tar.gz )
$ tar -xvf download/buildroot-${br_ver}.tar.gz
$ ln -snf buildroot-${br_ver} buildroot
* optionally update src/etc/ssl/certs/ca-certificates.crt
This is not required, but can be done to make sure its up to date.
# wget -O certdata.txt
# ./bin/mkcabundle <certdata.txt > src/etc/ssl/certs/ca-certificates.crt
* apply any local cirros patches to buildroot
( cd buildroot && QUILT_PATCHES=$PWD/../patches-buildroot quilt push -a )
* download the buildroot sources
$ ARCH=i386
$ make ARCH=$ARCH br-source
* Build buildroot for a given arch
# ARCH should be set to 'i386', 'x86_64', 'arm' or 'aarch64'
$ make ARCH=$ARCH OUT_D=$PWD/output/$ARCH
This will do a full buildroot build, which will take a while. The output
that CirrOS is interested in is output/i386/rootfs.tar.
That file is the full buildroot filesystem, and is used as input for
subsequent steps here.
* Download a kernel to use.
The kernel input to bundle must be in deb format. The ubuntu '-virtual'
kernel is used as a starting point.
# kver is newest -updates kernel from
$ kver="4.4.0-148.174"
$ ./bin/grab-kernels "$kver" $ARCH
* Download EFI grub to use.
The grub-efi input to bundle will be in tar.gz format.
# gver is newest from
$ gver="2.02~beta2-36ubuntu3.22"
$ ./bin/grab-grub-efi "$gver" $ARCH
* build disk images using bin/bundle
$ sudo ./bin/bundle -v --arch=$ARCH output/$ARCH/rootfs.tar \
download/kernel-$ARCH.deb download/grub-efi-$ARCH.tar.gz output/$ARCH/images
* Then, test using the images
$ kvm -drive file=disk.img,if=virtio -curses
$ kvm file=blank.img,if=virtio -curses \
-kernel kernel -initrd initrd -drive -append "debug-initrd"
You can’t perform that action at this time.