--- /dev/null
+#!/bin/bash
+
+[ $# -eq 1 ] || { echo "must give version"; exit 1; }
+
+VER=$1
+daily=false
+if [ "$1" = "daily" ]; then
+ VER="d$(date +%y%m%d)"
+ daily=true
+fi
+pre=cirros-$VER
+BR_VER="2015.05"
+ARCHES="${ARCHES:-i386 x86_64 arm powerpc aarch64 ppc64 ppc64le}"
+KVER="3.19.0-20.20~14.04.1"
+ME=$(readlink -f "$0")
+MY_D=${ME%/*}
+PATH=${MY_D}:$PATH
+
+dl() {
+ local url="$1" target="$2" tfile="" t=""
+ [ -f "$target" ] && return
+ t=$(dirname "$target")
+ tfile=$(mktemp "$t/.${0##*/}.XXXXXX") || return
+ wget "$url" -O "$tfile" &&
+ mv "$tfile" "$target" ||
+ { t=$?; rm -f "$tfile"; return $t; }
+}
+msg() {
+ echo "$@" >> "$LOGFILE"
+ echo "$@"
+}
+logevent() {
+ # logevent(msg, [from])
+ # log the message in $1 and time since $2, defaulting to last call.
+ local up delta msg="$1" ref="$2"
+ up=${SECONDS}
+ if [ "$ref" = "-" ]; then
+ ref=""
+ elif [ "$ref" = "" ]; then
+ ref="${_LAST_UP}"
+ fi
+ if [ -n "$ref" ]; then
+ delta="$(($up-$ref))"
+ fi
+ msg "$(date -R)" "$msg" "${delta:+[${delta}s]}"
+ _LAST_UP=$up
+ _RET=${_LAST_UP}
+}
+
+error() { echo "$@" 1>&2; }
+fail() { [ $# -eq 0 ] || error "$@"; exit 1; }
+
+set -e
+set -o pipefail
+
+out="$PWD/../build-$VER"
+LOGFILE="$out/date.txt"
+export TMPDIR="$out/tmp"
+mkdir -p "$out" "$TMPDIR"
+
+# really just here to check that VER is a tag
+# or source code checkout would fail
+if ! $daily; then
+ revno=$(bzr tags -r "tag:$VER") || fail "$VER: not a tag in $PWD."
+ revno=$(echo "$revno" | awk '{print $2}')
+fi
+
+logevent "begin" -
+tstart=${_RET}
+
+logevent "start download" -
+rm -f download
+mkdir -p ../download
+ln -snf ../download download
+brtgz="buildroot-${BR_VER}.tar.gz"
+dl "http://buildroot.uclibc.org/downloads/$brtgz" "download/$brtgz"
+logevent "end download"
+
+logevent "start unpack" -
+rm -Rf "buildroot-${BR_VER}"
+rm -f buildroot
+tar -xvf download/buildroot-${BR_VER}.tar.gz
+ln -snf buildroot-${BR_VER} buildroot
+
+# we do not do this here, so that we're not dependent on the
+# cvs working (which wont work through http_proxy) and also
+# to have revision controlled information in that file.
+#./bin/mkcabundle > src/etc/ssl/certs/ca-certificates.crt
+
+( cd buildroot && QUILT_PATCHES="$PWD/../patches-buildroot" quilt push -a )
+
+echo "$VER" > "src/etc/cirros/version"
+logevent "end unpack"
+
+logevent "start br-source" -
+make ARCH=i386 br-source
+logevent "end br-source"
+
+logevent "start kernel download" -
+grab-kernels "$KVER" ${ARCHES}
+logevent "end kernel download"
+
+for arch in ${ARCHES}; do
+ logevent "start $arch" -
+ time make ARCH=$arch "OUT_D=$out/build/$arch" \
+ ${CCACHE_D:+"BR2_CCACHE_DIR=${CCACHE_D}/$arch"} 2>&1 |
+ tee "$out/build-$arch.log";
+ ret=$?
+ logevent "finish $arch [ret=$ret]"
+done;
+
+for arch in ${ARCHES}; do
+ mkdir -p "$out/stage/$arch"
+done
+
+logevent "start bundling" -
+for arch in ${ARCHES}; do
+ case "$arch" in
+ powerpc|ppc*|aarch64) size=64M;;
+ *) size="";;
+ esac
+ sudo ./bin/bundle -v ${size:+--size=$size} --arch="$arch" \
+ "$out/build/$arch/rootfs.tar" \
+ ./download/kernel-$arch.deb "$out/stage/$arch";
+done
+logevent "finish bundling"
+
+sudo chown -R $USER:$USER "$out/stage"
+
+mkdir -p "$out/release"
+
+#srctgz="$out/release/cirros-$VER-source.tar.gz"
+#bzr export -r "tag:$VER" --format=tgz --root="cirros-$VER" "$srctgz"
+#echo "wrote source tgz: $srctgz"
+if ! $daily; then
+ ( srcd="$PWD" && tmpd=$(mktemp -d) && cd "$tmpd" &&
+ bzr branch "$srcd" -r tag:$VER cirros-$VER &&
+ rm -Rf cirros-$VER/.bzr &&
+ echo "$VER" > "cirros-$VER/src/etc/cirros/version" &&
+ tar cvzf - cirros-$VER ) > "$out/release/cirros-$VER-source.tar.gz"
+fi
+
+rm -f "$out/stage"/*/"$pre"*
+for arch in ${ARCHES}; do
+ p=$pre-$arch
+ ( cd "$out/stage/$arch" &&
+ ln kernel $p-vmlinuz && ln kernel $p-kernel &&
+ ln initramfs $p-initrd && ln initramfs $p-initramfs &&
+ ln part.img $p-rootfs.img &&
+ ln blank.img $p-blank.img &&
+ ln disk.img $p-disk.img &&
+ ln filesys.tar.gz $p-lxc.tar.gz &&
+ true
+ ); done
+
+logevent "start populating release" -
+for arch in ${ARCHES}; do
+ p=$pre-$arch
+ ( cd "$out/stage/$arch" &&
+ cp $p-kernel $p-initramfs $p-lxc.tar.gz "$out/release/" &&
+ gzip -9 -c $p-rootfs.img > $out/release/$p-rootfs.img.gz ) &&
+ ( cd "$out/stage/$arch" &&
+ tar cvzf - $p-blank.img $p-vmlinuz $p-initrd ) > \
+ "$out/release/$p-uec.tar.gz"
+ [ "$arch" = "arm" ] ||
+ cp "$out/stage/$arch/$p-disk.img" "$out/release/$p-disk.img"
+done
+
+mkdir -p "$out/release/buildroot_rootfs"
+for arch in ${ARCHES}; do
+ t="$out/release/buildroot_rootfs/buildroot-$VER-$arch.tar"
+ cp "$out/build/$arch/rootfs.tar" "$t" && gzip --force -9 "$t"
+done
+
+chmod u+rwX,go+rX -R "$out/release/"*
+
+sumfiles=$(cd "$out/release" && for f in *; do
+ [ -f "$f" -a "$f" != MD5SUMS ] && echo "$f"; done)
+( cd "$out/release" && md5sum $sumfiles > MD5SUMS )
+
+logevent "finish populate release" -
+msg "output in $out/release"
+msg "entire process took $SECONDS seconds"
+logevent "finished" "$tstart"