~smoser/+junk/modev-bin

« back to all changes in this revision

Viewing changes to build-ipxe

  • Committer: Scott Moser
  • Date: 2015-02-27 15:10:19 UTC
  • Revision ID: smoser@ubuntu.com-20150227151019-xiaonxxjtprx2ff0
add 'build-ipxe' for building ipxe

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/bash
 
2
 
 
3
_APT_UPDATED=false
 
4
IPXE_GIT="http://git.ipxe.org/ipxe.git"
 
5
IPXE_REF="HEAD"
 
6
 
 
7
error() { echo "$@" 1>&2; }
 
8
fail() { [ $# -eq 0 ] || error "$@"; exit 2; }
 
9
 
 
10
rel="$(lsb_release -sc)"
 
11
DEPS=(
 
12
    build-essential
 
13
    liblzma-dev
 
14
    libiberty-dev
 
15
    zlib1g-dev
 
16
)
 
17
 
 
18
apt_get() {
 
19
    local ret=""
 
20
    if [ "$1" != "update" ] && ! $_APT_UPDATED; then
 
21
        error "updating apt"
 
22
        apt_get update >/dev/null || {
 
23
            ret=$?;
 
24
            error "failed to update apt [$ret]";
 
25
            return $ret;
 
26
        }
 
27
        _APT_UPDATED=true
 
28
    fi
 
29
    sudo DEBIAN_FRONTEND=noninteractive eatmydata apt-get --quiet \
 
30
        --assume-yes "$@" </dev/null
 
31
}
 
32
 
 
33
filter_installed_packages() {
 
34
    # write to stdout, a list of packages not installed locally
 
35
    local fmt='${Package} ${Version}\n'
 
36
    LC_ALL=C dpkg-query --show "--showformat=${fmt}" "$@" 2>&1 | awk '
 
37
        $0 ~ /[Nn]o packages/ {
 
38
            sub("[.]$","",$NF);
 
39
            pkgs[n]=$NF;
 
40
            n=n+1;
 
41
        }
 
42
        $2 == "" {
 
43
                pkgs[n]=$1;
 
44
                n=n+1;
 
45
        };
 
46
        END { for(p in pkgs) {printf("%s ",pkgs[p])}; printf("\n"); }' n=0
 
47
}
 
48
 
 
49
apt_install() {
 
50
    local needed
 
51
    needed=$(filter_installed_packages "$@")
 
52
    [ -z "$needed" ] && return 0
 
53
    error "installing: $needed"
 
54
    apt_get install "$@"
 
55
}
 
56
 
 
57
apt_install "${DEPS[@]}" || fail "failed install deps: ${DEPS[*]}"
 
58
 
 
59
if [ ! -d ipxe ]; then
 
60
    rm -Rf ipxe.working &&
 
61
        git clone "$IPXE_GIT" ipxe.working || fail "failed clone $IPXE_GIT"
 
62
    mv ipxe.working ipxe || fail "failed mv git to ipxe"
 
63
fi
 
64
 
 
65
start_d="$PWD"
 
66
cd ipxe
 
67
git checkout master && git branch -d buildbranch >/dev/null || :
 
68
git branch buildbranch "$IPXE_REF" &&
 
69
    git checkout buildbranch || fail "failed branch of $IPXE_REF"
 
70
 
 
71
cat > src/config/local/console.h <<EOF
 
72
#define CONSOLE_PCBIOS
 
73
#define CONSOLE_SERIAL
 
74
EOF
 
75
[ $? -eq 0 ] || fail "failed write console.h"
 
76
( cd src && make ) || fail "failed build"