aboutsummaryrefslogtreecommitdiff
path: root/contrib/cpt-chbuild
blob: bfbbcd2469af6ebac7c117c9b01bdd02e7486350 (plain)
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
#!/bin/sh -e
# Create/destroy temporary chroots
case "$1" in
    --help|-h) printf '\033[1;33m-> \033[m%s\n' "usage: ${0##*/} [pkg...]"; exit 0
esac

log() { printf '\033[31;1m->\033[m %s.\n' "$@" ;}

die() {
    rm -f carbs-rootfs.tar.xz carbs-rootfs.tar.xz.sum

    log "$@"
    log "Re-run 'cpt-chbuild' to try again."

    exit 1
}

sh256() {
    # There's no standard utility to generate sha256 checksums.
    # This is a simple wrapper around sha256sum, sha256, shasum
    # and openssl which will use whatever is available.
    #
    # All utilities must match 'sha256sum' output.
    #
    # Example: '<checksum>  <file>'
    [ -e "$1" ] || return 0

    hash=$(sha256sum "$1" ||
           sha256 -r "$1" ||
           openssl dgst -sha256 -r "$1" ||
           shasum -a 256 "$1")

    printf '%s  %s\n' "${hash%% *}" "$1"
} 2>/dev/null

case "$(uname -m)" in i*86) arch=i686; esac
url="https://dl.carbslinux.org/releases/${arch:-$(uname -m)}/carbs-rootfs.tar.xz"
pid=$$

cd "${cac_dir:=$CPT_ROOT${CPT_CACHE:=${XDG_CACHE_HOME:-$HOME/.cache}/cpt}}"

[ -f carbs-rootfs.tar.xz ] || {
    log "Downloading chroot tarball"
    curl -fLO "$url"
}

[ -f carbs-rootfs.tar.xz.sum ] || {
    log "Downloading checksums"
    curl -fLo- "${url%/*}/sha256sums.txt" |
        grep ' carbs-rootfs.tar.xz$' > carbs-rootfs.tar.xz.sum
}

log "Verifying checksums"
sh256 carbs-rootfs.tar.xz | diff - carbs-rootfs.tar.xz.sum ||
    die "Checksum verification failed"


[ -d carbs-chroot ] || {
    log "Extracting chroot"
    mkdir -p carbs-chroot
    ( cd carbs-chroot; tar xf ../carbs-rootfs.tar.xz )
}

log "Creating temporary chroot"
cp -a carbs-chroot "chroot-$pid"

[ "$1" ] && {
    log "Installing extra packages"
    CPT_ROOT=$PWD/chroot-$pid cpt-install "$@"
}

log "Entering chroot"
su -c "cpt-chroot chroot-$pid; rm -rf chroot-$pid"