From 330e2e79f348c559cc44a232fae817af2927f984 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Hertzog?= Date: Wed, 24 Dec 2014 11:23:51 +0100 Subject: [PATCH] Build a single image by default To build multiple images, pass --arch multiple times (or call the script multiple times). --- build_all.sh | 77 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 31 deletions(-) diff --git a/build_all.sh b/build_all.sh index 6804566..2b659de 100755 --- a/build_all.sh +++ b/build_all.sh @@ -5,36 +5,24 @@ set -e KALI_DIST=kali KALI_VERSION="${VERSION:-daily}" TARGET_DIR=$(dirname $0)/images/kali-$KALI_VERSION -SUDO="" +SUDO="sudo" -# We need root rights at some point -if [ "$(whoami)" != "root" ]; then - if ! which sudo >/dev/null; then - echo "ERROR: $0 is not run as root and sudo is not available" - exit 1 - fi - SUDO=sudo -fi +image_name() { + local arch=$1 -HOST_ARCH="$(dpkg --print-architecture)" -case "$HOST_ARCH" in - i386|amd64) - KALI_ARCHES="amd64 i386" - IMAGE_TEMPLATE="live-image-ARCH.hybrid.iso" - ;; - armel|armhf) - KALI_ARCHES="$HOST_ARCH" - IMAGE_TEMPLATE="live-image-ARCH" - IMAGE_EXT="img" - ;; - *) - echo "ERROR: $HOST_ARCH build is not supported" - exit 1 - ;; -esac + case "$arch" in + i386|amd64) + IMAGE_TEMPLATE="live-image-ARCH.hybrid.iso" + ;; + armel|armhf) + IMAGE_TEMPLATE="live-image-ARCH" + ;; + esac + echo $IMAGE_TEMPLATE | sed -e "s/ARCH/$arch/" +} # Parsing command line options -temp=$(getopt -o spdr -l single,proposed-updates,kali-dev,kali-rolling -- "$@") +temp=$(getopt -o spdra: -l single,proposed-updates,kali-dev,kali-rolling,arch: -- "$@") eval set -- "$temp" while true; do case "$1" in @@ -42,16 +30,33 @@ while true; do -p|--proposed-updates) OPT_pu="1"; shift 1; ;; -d|--kali-dev) OPT_kali_dev="1"; shift 1; ;; -r|--kali-rolling) OPT_kali_rolling="1"; shift 1; ;; + -a|--arch) KALI_ARCHES="${KALI_ARCHES:+$KALI_ARCHES } $2"; shift 2; ;; --) shift; break; ;; *) echo "ERROR: Invalid command-line option: $1" >&2; exit 1; ;; esac done if [ -n "$OPT_single" ]; then - echo "Building a single arch ($HOST_ARCH)..." - KALI_ARCHES="$HOST_ARCH" + echo "WARNING: The --single option is deprecated, it's the default behaviour now." >&2 fi +HOST_ARCH=$(dpkg --print-architecture) +KALI_ARCHES=${KALI_ARCHES:-$HOST_ARCH} + +for arch in $KALI_ARCHES; do + if [ "$arch" = "$HOST_ARCH" ]; then + continue + fi + case "$HOST_ARCH/$arch" in + amd64/i386|i386/amd64) + ;; + *) + echo "Can't build $arch image on $HOST_ARCH system." >&2 + exit 1 + ;; + esac +done + KALI_CONFIG_OPTS="--" if [ -n "$OPT_kali_rolling" ]; then echo "Using kali-rolling as the base distribution" @@ -87,11 +92,21 @@ if dpkg --compare-versions "$ver_live_build" lt 4.0.3-1kali2; then exit 1 fi +# We need root rights at some point +if [ "$(whoami)" != "root" ]; then + if ! which $SUDO >/dev/null; then + echo "ERROR: $0 is not run as root and $SUDO is not available" + exit 1 + fi +else + SUDO="" # We're already root +fi + cd $(dirname $0) mkdir -p $TARGET_DIR for KALI_ARCH in $KALI_ARCHES; do - IMAGE_NAME=$(echo $IMAGE_TEMPLATE | sed -e "s/ARCH/$KALI_ARCH/") + IMAGE_NAME="$(image_name $KALI_ARCH)" $SUDO lb clean --purge >prepare.log 2>&1 lb config -a $KALI_ARCH $KALI_CONFIG_OPTS >>prepare.log 2>&1 $SUDO lb build >/dev/null @@ -101,8 +116,8 @@ for KALI_ARCH in $KALI_ARCHES; do tail -n 50 binary.log >&2 exit 1 fi - [ -d images ] || mkdir images - IMAGE_EXT="${IMAGE_EXT:-${IMAGE_NAME##*.}}" + IMAGE_EXT="${IMAGE_NAME##*.}" + IMAGE_EXT="${IMAGE_EXT:-img}" mv $IMAGE_NAME $TARGET_DIR/kali-linux-$KALI_VERSION-$KALI_ARCH.$IMAGE_EXT mv binary.log $TARGET_DIR/kali-linux-$KALI_VERSION-$KALI_ARCH.log done