~smoser/cirros/cirros.automate

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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 10.04 or 12.04 LTS.

To use it, you would do something like:
 * get some build dependencies:
   $ sudo apt-get -y install bison flex texinfo build-essential gettext ncurses-dev unzip bzr qemu-kvm cvs quilt

 * bzr branch lp:cirros
 * cd cirros

 * download buildroot and setup environment
   $ br_ver="2012.05"
   $ mkdir -p ../download
   $ ln -snf ../download download
   $ ( cd download && wget http://buildroot.uclibc.org/downloads/buildroot-${br_ver}.tar.gz )
   $ tar -xvf download/buildroot-${br_ver}.tar.gz
   $ ln -snf buildroot-${br_ver} buildroot

 * update ./bin/mkcabundle > src/etc/ssl/certs/ca-certificates.crt
   $ ./bin/mkcabundle > 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
   $ make ARCH=i386 br-source

 * Build buildroot for a given arch
   # ARCH should be set to 'i386', 'x86_64' or 'arm'
   $ make ARCH=i386 OUT_D=$PWD/output/i386

   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="3.2.0-41.66";
   $ burl="https://launchpad.net/ubuntu/+archive/primary/+files/linux-image"
   $ for arch in i386 x86_64 arm; do
     xarch=$arch; flav="virtual"
     [ "$arch" = "x86_64" ] && xarch="amd64";
     [ "$arch" = "arm" ] && xarch="armel" && flav="omap"
     url="$burl-${kver%.*}-${flav}_${kver}_${xarch}.deb"
     wget "$url" -O download/${url##*/}
     ln -sf ${url##*/} download/kernel-${arch}.deb
   done

 * build disk images using bin/bundle
   $ sudo ./bin/bundle -v output/$ARCH/rootfs.tar download/kernel-$ARCH.deb 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"