#!/bin/sh IMAGE_NAME="${IMAGE_NAME:=alpine-vm}" IMAGE_SIZE="${IMAGE_SIZE:-512M}" IMAGE_FORMAT="${IMAGE_FORMAT:=raw}" ALPINE_BRANCH="${ALPINE_BRANCH:=latest-stable}" KERNEL_FLAVOR="${KERNEL_FLAVOR:=virt}" IMAGE_FILE="vm.${IMAGE_FORMAT}" SCRIPT_DIR="$PWD" OVERLAY_DIR="${SCRIPT_DIR}/overlay" CONFIGURE_SH="${SCRIPT_DIR}/configure.sh" TMP=$(mktemp) modprobe nbd max_parts=8 && [ -e /dev/nbd0 ] || mknod /dev/nbd0 b 43 0 cleanup() { rm -f "$TMP" "${TMP}.rc" } trap cleanup INT TERM EXIT # We use BIOS here to skip creating partitions RC_FILE="${TMP}.rc" # Capture the real exit status of alpine-make-vm-image (the `| tee` pipeline # would otherwise mask it behind tee's status; busybox ash has no PIPESTATUS). { alpine-make-vm-image \ --boot-mode "BIOS" \ --branch "$ALPINE_BRANCH" \ --image-format "$IMAGE_FORMAT" \ --image-size "$IMAGE_SIZE" \ --kernel-flavor "$KERNEL_FLAVOR" \ --serial-console \ --fs-skel-dir "$OVERLAY_DIR" \ --fs-skel-chown root:root \ --script-chroot \ --packages "nftables curl docker openssh" \ "$IMAGE_FILE" \ "$CONFIGURE_SH"; echo $? > "$RC_FILE"; } 2>&1 | tee "$TMP" rc=$(cat "$RC_FILE" 2>/dev/null || echo 1) if [ "$rc" -ne 0 ]; then echo "BUILD FAILED (alpine-make-vm-image exited $rc)" exit 1 fi