#!/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="$(find . -name kernel -or -name '*bzImage')" CMDLINE="$*" [ "$KERNEL" = "./kernel" ] || mv "$KERNEL" vmlinuz64 [ "$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, testing needed to see if raw->vmdk conversion makes any efficency gains virt-make-fs --size=1G --type=ext4 --partition files.tar --format=qcow2 disk.qcow guestfish -a disk.qcow -m /dev/sda1 <&2 cat disk.vmdk