#!/bin/bash _APT_UPDATED=false CIRROS_BRANCH="lp:cirros" CIRROS_D="" DEPS=( bc bison build-essential bzr flex gettext libncurses5-dev qemu-kvm quilt rsync texinfo unzip wget ) error() { echo "$@" 1>&2; } fail() { [ $# -eq 0 ] || error "$@"; exit 2; } apt_get() { local ret="" if [ "$1" != "update" ] && ! $_APT_UPDATED; then error "updating apt" apt_get update >/dev/null || { ret=$?; error "failed to update apt [$ret]"; return $ret; } _APT_UPDATED=true fi sudo DEBIAN_FRONTEND=noninteractive apt-get --quiet \ --assume-yes "$@" &1 | awk ' $0 ~ /[Nn]o packages/ { sub("[.]$","",$NF); pkgs[n]=$NF; n=n+1; } $2 == "" { pkgs[n]=$1; n=n+1; }; END { for(p in pkgs) {printf("%s ",pkgs[p])}; printf("\n"); }' n=0 } apt_install() { local needed needed=$(filter_installed_packages "$@") [ -z "$needed" ] && return 0 error "installing: $needed" apt_get install "$@" } dist_id=$(lsb_release --short --id) || fail "failed: lsb_release --short --id" case "$dist_id" in *buntu) :;; *) fail "do not know how to setup $dist_id";; esac ver=$(lsb_release --short --release) [[ "$ver" < "14.04" ]] && fail "building not supported prior to 14.04" me=$(readlink -f "$0") myd=$(dirname "$me") if [ -f "$myd/../fixup-fs" ]; then CIRROS_D=$(cd "$myd/.." && pwd) elif [ -f "$PWD/cirros/fixup-fs" ]; then CIRROS_D="$PWD/cirros" fi apt_install "${DEPS[@]}" if [ -z "$CIRROS_D" ]; then error "getting $CIRROS_BRANCH to $PWD/cirros" bzr branch "$CIRROS_BRANCH" cirros || fail "failed branch $CIRROS_BRANCH" CIRROS_D="$PWD/cirros" fi error "set up functional to $CIRROS_D" # vi: ts=4 expandtab