#!/bin/sh set -e mkdir -p /tmp/image cd /tmp/image # input is a tarball of kernel and initrd.img on stdin # output is a vhd 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 CFG="DEFAULT linux LABEL linux KERNEL /kernel INITRD /initrd.img APPEND ${CMDLINE} " printf "$CFG" > syslinux.cfg cd .. tar cf files.tar -C files . # no direct vhd support virt-make-fs --size=1G --type=ext4 --partition files.tar disk.img guestfish -a disk.img -m /dev/sda1 <&2 cat disk.vhd