--- a +++ b/trunk/wharfie/qemu/qwharfie.sh @@ -0,0 +1,70 @@ +PREFIX=$(dirname $(readlink -f $0)) +DISK=${PREFIX}/qwharfie.qcow +INPUT=qwharfie.input.raw +OUTPUT=qwharfie.output.raw +CACHE=qwharfie.cache.qcow +UUID=$(cat ${DISK}.uuid) +INITRD=$(ls -1 ${PREFIX}/boot/initrd* | sort | head -n 1) +KERNEL=$(ls -1 ${PREFIX}/boot/vmlinuz* | sort | head -n 1) +QEMU=$(which qemu-system-x86_64) + +QWHARFIE_OUTPUT=1G +QWHARFIE_CACHE=10G + +function error() +{ + msg=${1} + echo "error: ${msg}"; + exit 1; +} + +# Check, that all prerequisits are there +[ -z ${DISK} ] && error "No hard drive image defined"; +[ -z ${UUID} ] && error "No UUID for HD image found. Has to be a file, named '<img-name>.uuid'."; +[ -z ${INITRD} ] && error "No initial ramdisk found (searched in /boot for initrd*)"; +[ -z ${KERNEL} ] && error "No kernel found (searched in /boot for vmlinuz*)"; +[ -z ${QEMU} ] && error "No QEMU system emulation found. Install Qemu system emulation for x86_64"; + +# Generate Makefile +#${PREFIX}/../wharfie.py --gen-only +#cp ${PREFIX}/../wharfie.mk . + +# Create input, output and cache images +tar --exclude="${INPUT}" --exclude="${OUTPUT}" --exclude="${CACHE}" -cf ${INPUT} . + +if [ ! -f ${OUTPUT} ]; then + qemu-img create -f raw ${OUTPUT} ${QWHARFIE_OUTPUT} +fi + +if [ ! -f ${CACHE} ]; then + if [ -f ${PREFIX}/${CACHE} ]; then + cp ${PREFIX}/${CACHE} . + else + + qemu-img create -f raw ${CACHE}.raw ${QWHARFIE_CACHE} + # 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 ${CACHE}.raw && + l=$(sudo /sbin/kpartx -l ${CACHE}.raw | sed -n '/loop/ s,.*/dev/\(loop[0-9]\+\).*,\1, p;q;') && + + sudo /sbin/kpartx -as ${CACHE}.raw && + + # Create filesystem + sudo mkfs.ext3 /dev/mapper/${l}p1 && + sudo /sbin/kpartx -ds ${CACHE}.raw && + qemu-img convert -O qcow2 ${CACHE}.raw ${CACHE} + rm -f ${CACHE}.raw + fi +fi + +# Run Qemu +${QEMU} -machine accel=kvm -m 512 -hda ${DISK} -hdb ${CACHE} -hdc ${INPUT} -hdd ${OUTPUT} -net nic,model=virtio -net user -kernel ${KERNEL} -initrd ${INITRD} -append "root=UUID=${UUID} ro single console=ttyS0 fsck.mode=skip systemd.unit=multi-user.target" -nographic + +tar -xf ${OUTPUT}