#!/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 vmdk 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 . # Disk is created in qcow format. virt-make-fs --size=25G --type=ext4 --partition files.tar --format=qcow2 disk.qcow guestfish -a disk.qcow -m /dev/sda1 <&2 # Then create dynamic VHD qemu-img convert -f vmdk -O vpc -o subformat=dynamic disk.vmdk disk.vhd 1>&2 cat disk.vhd