#!/bin/sh # Prepara o ambiente de VMs: imagens, seed e maquinas virtuais. # Requer: libvirt (qemu:///session), virt-install, qemu-img, mkisofs. set -e HERE=$(cd "$(dirname "$0")" && pwd) WORK=${WORK:-/var/tmp/vmtest} CONN=qemu:///session mkdir -p "$WORK" cd "$WORK" fetch() { url=$1; out=$2 [ -s "$out" ] && { echo " $out ja existe"; return; } echo " baixando $out" curl -fsSL -o "$out.part" "$url" mv "$out.part" "$out" } echo "== imagens ==" fetch https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-genericcloud-amd64.qcow2 debian.qcow2 fetch https://dl-cdn.alpinelinux.org/alpine/v3.20/releases/cloud/nocloud_alpine-3.20.3-x86_64-bios-cloudinit-r0.qcow2 alpine.qcow2 echo "== redimensionando ==" for img in debian.qcow2 alpine.qcow2; do size=$(qemu-img info --output=json "$img" | grep -oP '"virtual-size":\s*\K[0-9]+') if [ "${size:-0}" -lt 8589934592 ]; then qemu-img resize "$img" 8G else echo " $img ja tem 8G" fi done echo "== disco de dados (fontes + script de teste) ==" if [ ! -s data.img ]; then dd if=/dev/zero of=data.img bs=1M count=8 status=none mkfs.ext4 -q -F data.img fi echo "== seed cloud-init ==" cat > user-data <<'EOF' #cloud-config hostname: rfs-test ssh_pwauth: true disable_root: false users: - name: root lock_passwd: false plain_text_passwd: rfstest chpasswd: expire: false EOF cat > meta-data <<'EOF' instance-id: rfs-test-1 local-hostname: rfs-test EOF cat > network-config <<'EOF' version: 2 ethernets: eth0: dhcp4: true EOF rm -f seed.iso mkisofs -output seed.iso -volid cidata -joliet -rock \ user-data meta-data network-config >/dev/null 2>&1 echo "== definindo VMs ==" define_vm() { name=$1; img=$2; variant=$3; mem=$4 if virsh -c "$CONN" dominfo "$name" >/dev/null 2>&1; then echo " $name ja existe" return fi virt-install -c "$CONN" \ --name "$name" \ --memory "$mem" --vcpus 2 \ --disk "path=$WORK/$img,format=qcow2,bus=virtio" \ --disk "path=$WORK/seed.iso,device=cdrom" \ --os-variant "$variant" \ --network user,model=virtio \ --graphics none --console pty \ --import --noautoconsole >/dev/null echo " criada: $name" } define_vm rfs-debian debian.qcow2 debian12 2048 define_vm rfs-alpine alpine.qcow2 alpinelinux3.20 1024 echo echo "Pronto. Use tests/vm/run_in_vm.sh para testar."