#!/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, 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 <<EOF
  upload /usr/lib/SYSLINUX/mbr.bin /mbr.bin
  copy-file-to-device /mbr.bin /dev/sda size:440
  rm /mbr.bin
  extlinux /
  part-set-bootable /dev/sda 1 true
EOF

# compress qcow image to VMware Disk format
qemu-img convert -f qcow2 -O vmdk -o adapter_type=lsilogic,subformat=streamOptimized,compat6 -c disk.qcow disk.vmdk 1>&2

cat disk.vmdk
