summaryrefslogtreecommitdiffstats
path: root/builder/dnbd3-rootfs/scripts/build.sh
blob: dc804d4d3f7918faad5939a25387c4bad8565b6b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
source "$(dirname "${BASH_SOURCE[0]}")/rebash/core.sh"
core.import logging

build_clean_qemu_nbd() {
    # removes qemu-nbd.
    #
    rm --recursive --force "$1/*"
}
build_compile_qemu_nbd() {
    # Downloads and compiles qemu-nbd.
    #
    # Examples:
    #
    # >>> build_compile_qemu_nbd path/to/nbd/directory/
    # ...
    # Provides the following file:
    # "$1/qemu-nbd"
    logging.info 'Compiling static qemu-nbd binary. This takes a while,' \
        'grab a cup of coffee...'
    # TODO check if need all, after disabling features
    # TODO check dependencies
    #su -s /bin/bash nobody
    #yaourt --noconfirm -S glib2-static glibc-static pcre-static
    #exit
    pushd "$(dirname $1)"
    [ ! -e qemu ] && git clone git://git.qemu.org/qemu.git qemu
    cd qemu
    # TODO check what other features can be disabled
    ./configure --static --target-list=x86_64-linux-user \
        --python=$(which python2) --disable-docs --disable-gtk --disable-vnc \
        --disable-kvm --disable-libssh2 --enable-user --disable-system \
        --disable-fdt --disable-libnfs --disable-glusterfs --disable-libiscsi \
        --disable-gcrypt --disable-nettle && make qemu-nbd
    local ret=$?
    popd
    return $ret
}
build_compile_nbd() {
    # Downloads and compiles nbd.
    #
    # Examples:
    #
    # >>> build_compile_nbd path/to/nbd/directory/
    # ...
    # Provides the following file:
    # "$1/nbd.ko"
    pushd "$1"
    logging.info 'Compile the nbd kernel module.'
    make
    popd
    return $?
}
build_clean_nbd() {
    # Cleans nbd specific generated files
    #
    # Examples:
    #
    # >>> build_clean_nbd path/to/nbd/directory/
    # ...
    # Removes the following file:
    # "$1/nbd.ko"
    pushd "$1"
    make clean
    popd
    return $?
}
build_compile_dnbd3() {
    # Downloads and compiles dnbd3.
    #
    # Examples:
    #
    # >>> build_compile_dnbd3 path/to/dnbd3/directory/
    # ...
    # Provides the following file:
    # "$1/build/dnbd3.ko"
    pushd "$1/.."
    rm --recursive --force "$1"
    git clone git://git.openslx.org/dnbd3.git
    cd dnbd3
    ./build.sh
    popd
    return $?
}
build_clean_dnbd3() {
    # Removes generated dnbd3 specific files.
    #
    # Examples:
    #
    # >>> build_clean_dnbd3 path/to/dnbd3/directory/
    # ...
    # Removes the following directory:
    # "$1/build"
    rm --recursive --force "$1/build"
    return $?
}
build_compile_systemd_preserve_process_marker() {
    # Compiles simple c program.
    #
    # Examples:
    #
    # >>> build_compile_systemd_preserve_process_marker path/to/program/folder
    pushd "$1"
    make
    popd
    return $?
}
build_clean_systemd_preserve_process_marker() {
    # Removes compiled simple c program.
    #
    # Examples:
    #
    # >>> build_clean_systemd_preserve_process_marker path/to/program/folder
    pushd "$1"
    make clean
    popd
    return $?
}
build_mount_partition() {
    # Mounts a partition at given offset.
    #
    # Examples:
    #
    # >>> build_mount_partition /dev/DEVICE_NAME PARTITION_IDENTIFIER
    # ...
    local device="$1"
    local partition_identifier="$2"
    local loop_device="$(losetup --find)"

    local sector_size="$(blockdev --getbsz "$device")"
    local partition_info="(partx --raw --noheadings --output START,NAME,UUID \
        "$device" 2>/dev/null| grep part)"
    local offset_sectors="$(echo "$partition_identifier" | \
        cut --delimiter=' ' --fields=1)"
    if [ -z "$offset_sectors" ]; then
        logging.warn "could not find partition with identifier \"$partition_identifier\" on device $device"
        return 1
    fi
    # NOTE: Could overflow on 32bit systems
    # logging.warn "$(("$offset_sectors"*512))"
    local offset_bytes="$(echo | awk -v x="$offset_sectors" -v y="$sector_size" '{print x * y}')"

    # NOTE: Test if mount works directly (problem with btrfs device id).
    # mount --verbose --options loop,offset="$offset_bytes" "$device" "$mount_point"
    losetup --verbose --offset "$offset_bytes" "$loop_device" "$device"
    echo "$loop_device"
}