The cirros image was rebuilt against the 3.13.0-83 kernel, drivers e1000e, igbvf...
[packages/trusty/cirros-testvm.git] / cirros-testvm / src-cirros / bin / system-setup
diff --git a/cirros-testvm/src-cirros/bin/system-setup b/cirros-testvm/src-cirros/bin/system-setup
new file mode 100755 (executable)
index 0000000..c82fee4
--- /dev/null
@@ -0,0 +1,94 @@
+#!/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 "$@" </dev/null
+}
+
+filter_installed_packages() {
+    # write to stdout, a list of packages not installed locally
+    local fmt='${Package} ${Version}\n'
+    LC_ALL=C dpkg-query --show "--showformat=${fmt}" "$@" 2>&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