#!/bin/sh # Envia o codigo-fonte e o script de teste para dentro de uma VM e executa. # # Uso: run_in_vm.sh # CC=clang run_in_vm.sh rfs-debian # build no guest com clang # Requer: guestcmd.py (mesmo diretorio), mkisofs, libvirt, sudo (loop mount). set -e DOMAIN=${1:?uso: run_in_vm.sh } HERE=$(cd "$(dirname "$0")" && pwd) REPO=$(cd "$HERE/../.." && pwd) WORK=${WORK:-/var/tmp/vmtest} echo "== empacotando o codigo-fonte ==" tar czf "$WORK/rfs-src.tar.gz" -C "$REPO" \ --exclude=.git --exclude='*.o' --exclude='*.lo' --exclude='*.la' \ --exclude='.libs' --exclude=build-aux --exclude=m4 \ --exclude=autom4te.cache --exclude=config.h --exclude=config.log \ --exclude=config.status --exclude=libtool \ --exclude='Makefile' --exclude='Makefile.in' --exclude=configure \ --exclude=aclocal.m4 --exclude='*.8' --exclude=stamp-h1 \ --exclude='reiserfscore/reiserfs_err.c' \ --exclude='reiserfscore/reiserfs_err.h' \ . echo "== montando o disco de dados ==" rm -rf /tmp/vmdata.$$ && mkdir -p /tmp/vmdata.$$ sudo mount -o loop "$WORK/data.img" /tmp/vmdata.$$ sudo cp "$WORK/rfs-src.tar.gz" "$HERE/run_tests.sh" /tmp/vmdata.$$ sync sudo umount /tmp/vmdata.$$ && rmdir /tmp/vmdata.$$ echo "== transferindo para $DOMAIN ==" ATTACH=/tmp/vdb.$$.xml cat > "$ATTACH" < EOF virsh attach-device "$DOMAIN" "$ATTACH" --live >/dev/null 2>&1 || true rm -f "$ATTACH" echo "== extraindo e rodando os testes ${CC:+com CC=$CC} ==" "$HERE/guestcmd.py" "$DOMAIN" " set -e mkdir -p /mnt/data # remount forcado: o host trocou o conteudo do disco por baixo do guest umount /mnt/data 2>/dev/null || true mount -o ro /dev/vdb /mnt/data rm -rf /root/rfs mkdir -p /root/rfs tar xzf /mnt/data/rfs-src.tar.gz -C /root/rfs cp /mnt/data/run_tests.sh /root/run_tests.sh chmod +x /root/run_tests.sh SRC=/root/rfs ${CC:+CC=$CC }sh /root/run_tests.sh " 1800