1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #!/bin/bash OUT=${1} d=$(basename $(mktemp -d)); # create blank image qemu-img create -f raw ${OUT}.raw 2G && # create partition table ( echo o # Create a new empty DOS partition table echo n # Add a new partition echo p # Primary partition echo 1 # Partition number echo # First sector (Accept default: 1) echo # Last sector (Accept default: varies) echo w # Write changes ) | sudo fdisk ${OUT}.raw && l=$(/sbin/kpartx -l ${OUT}.raw | sed -n '/loop/ s,.*/dev/\(loop[0-9]\+\).*,\1, p;q;') && /sbin/kpartx -as ${OUT}.raw && # Create filesystem uuid=$(mkfs.ext3 /dev/mapper/${l}p1 | sed -n '/^Filesystem UUID/ s,.*: \(.*\),\1, p') && mount /dev/mapper/${l}p1 /tmp/${d} && # Copy files ((tar -cf - .) | (cd /tmp/${d}; tar -xf -)) && # Generate fstab with root partition mkdir /tmp/${d}/build && ( echo "UUID=${uuid} / ext3 errors=remount-ro 0 0"; ) > /tmp/${d}/etc/fstab umount /tmp/${d} && /sbin/kpartx -ds ${OUT}.raw && qemu-img convert -O qcow2 ${OUT}.raw ${OUT} echo ${uuid} > ${OUT}.uuid rm -f ${OUT}.raw rmdir /tmp/${d} |