#!/bin/sh set -e # for debugging [ -n "$DEBUG" ] && set -x mkdir -p /tmp/image cd /tmp/image # input is a tarball of kernel and initrd.img on stdin # output is a compressed tarball of a raw disk image on stdout mkdir -p files cd files # extract. As guestfs base is currently Debian, no compression support # only if stdin is a tty, if so need files volume mounted... [ -t 0 ] || tar xf - INITRD="$(find . -name '*.img')" KERNEL="./kernel" CMDLINE="$*" [ "$INITRD" = "./initrd.img" ] || mv "$INITRD" initrd.img # clean up subdirectories find . -mindepth 1 -maxdepth 1 -type d | xargs rm -rf # should be externally provided as GCP specific GCP_CONFIG="earlyprintk=ttyS0,115200 console=ttyS0,115200 vsyscall=emulate page_poison=1" CFG="DEFAULT linux LABEL linux KERNEL /kernel INITRD /initrd.img APPEND ${CMDLINE} " printf "$CFG" > syslinux.cfg cd .. tar cf files.tar -C files . virt-make-fs --size=1G --type=ext4 --partition files.tar disk.raw guestfish -a disk.raw -m /dev/sda1 <