c82fee4197b911ba4bada2db1bb877f96cc167e3
[packages/trusty/cirros-testvm.git] / cirros-testvm / src-cirros / bin / system-setup
1 #!/bin/bash
2
3 _APT_UPDATED=false
4 CIRROS_BRANCH="lp:cirros"
5 CIRROS_D=""
6 DEPS=(
7   bc
8   bison
9   build-essential
10   bzr
11   flex
12   gettext
13   libncurses5-dev
14   qemu-kvm
15   quilt
16   rsync
17   texinfo
18   unzip
19   wget
20 )
21
22 error() { echo "$@" 1>&2; }
23 fail() { [ $# -eq 0 ] || error "$@"; exit 2; }
24
25 apt_get() {
26     local ret=""
27     if [ "$1" != "update" ] && ! $_APT_UPDATED; then
28         error "updating apt"
29         apt_get update >/dev/null || {
30             ret=$?;
31             error "failed to update apt [$ret]";
32             return $ret;
33         }
34         _APT_UPDATED=true
35     fi
36     sudo DEBIAN_FRONTEND=noninteractive apt-get --quiet \
37         --assume-yes "$@" </dev/null
38 }
39
40 filter_installed_packages() {
41     # write to stdout, a list of packages not installed locally
42     local fmt='${Package} ${Version}\n'
43     LC_ALL=C dpkg-query --show "--showformat=${fmt}" "$@" 2>&1 | awk '
44         $0 ~ /[Nn]o packages/ {
45             sub("[.]$","",$NF);
46             pkgs[n]=$NF;
47             n=n+1;
48         }
49         $2 == "" {
50                 pkgs[n]=$1;
51                 n=n+1;
52         };
53         END { for(p in pkgs) {printf("%s ",pkgs[p])}; printf("\n"); }' n=0
54 }
55
56 apt_install() {
57     local needed
58     needed=$(filter_installed_packages "$@")
59     [ -z "$needed" ] && return 0
60     error "installing: $needed"
61     apt_get install "$@"
62 }
63
64 dist_id=$(lsb_release --short --id) || fail "failed: lsb_release --short --id"
65 case "$dist_id" in
66     *buntu) :;;
67     *) fail "do not know how to setup $dist_id";;
68 esac
69
70 ver=$(lsb_release --short --release)
71 [[ "$ver" < "14.04" ]] &&
72     fail "building not supported prior to 14.04"
73
74 me=$(readlink -f "$0")
75 myd=$(dirname "$me")
76
77 if [ -f "$myd/../fixup-fs" ]; then
78     CIRROS_D=$(cd "$myd/.." && pwd)
79 elif [ -f "$PWD/cirros/fixup-fs" ]; then
80     CIRROS_D="$PWD/cirros"
81 fi
82
83 apt_install "${DEPS[@]}"
84
85 if [ -z "$CIRROS_D" ]; then
86     error "getting $CIRROS_BRANCH to $PWD/cirros"
87     bzr branch "$CIRROS_BRANCH" cirros ||
88         fail "failed branch $CIRROS_BRANCH"
89     CIRROS_D="$PWD/cirros"
90 fi
91
92 error "set up functional to $CIRROS_D"
93
94 # vi: ts=4 expandtab