#!/bin/sh -e # Create/destroy temporary chroots case "$1" in --help|-h) printf '\033[1;33m-> \033[m%s\n' "usage: ${0##*/}"; 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 'kiss-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: ' ' [ -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:=$KISS_ROOT${XDG_CACHE_HOME:-$HOME/.cache}/kiss}" [ -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" KISS_ROOT=$PWD/chroot-$pid kiss i "$@" } log "Entering chroot" su -c "kiss-chroot chroot-$pid; rm -rf chroot-$pid"