#!/bin/zsh name=${NAME:-${PREFIX:-Test-}$(uuidgen | cut -c -6)} hostname=${name:l} : ${STAGEDIR:=~/.cache/stage3s} : ${STAGEARCH:=amd64} : ${POOL:=default} : ${KVER:=4.4.6} : ${KERNDIR:=/var/lib/libvirt/images} : ${KERNEL:=${KERNDIR}/vmlinuz-${KVER}-gentoo.vm} : ${INITRD:=${KERNDIR}/initramfs-genkernel-x86_64-${KVER}-gentoo.vm} : ${KCMDLINE:=root=/dev/${hostname}/root ro dolvm rootfstype=ext4 nodetect fastboot quiet} : ${BRIDGE:=br0} stagetbz="${1}" if [[ -z ${stagetbz} ]]; then stagetbz=$(find "${STAGEDIR}" -name "stage3-${STAGEARCH}-*.tar.bz2" \ -printf '%T@\t%p\n' | sort -nr | awk '{print $2;exit}') fi if [[ -z ${stagetbz} ]]; then printf 'usage: %s tarball\n' "${0##*/}" >&2 exit 2 fi set -e vmsetup=$(mktemp) trap 'rm -f ${vmsetup}' EXIT cat > ${vmsetup} < /etc/conf.d/net ln -snf /usr/share/zoneinfo/America/Chicago /etc/localtime echo 'America/Chicago' > /etc/timezone sed -i s/localhost/${hostname}/ /etc/conf.d/hostname ssh-keygen -A ln -snf /proc/self/mounts /etc/mtab ln -snf /run/resolv.conf /etc/resolv.conf ln -snf /run/ntp.conf /etc/ntp.conf EOF pooldir=$(virsh pool-dumpxml ${POOL} | xml sel -t -v '//pool/target/path') ssh_key=~/.ssh/id_ed25519.pub if [[ ! -f ${ssh_key} ]]; then ssh_keys=( ~/.ssh/id_*.pub ) ssh_key=${ssh_keys[1]} unset ssh_keys fi printf 'Creating %s from %s\n' "${pooldir}/${name}.img" "${stagetbz}" stage3img "${stagetbz}" "${pooldir}/${name}.img" \ -i ${ssh_key} \ -L ${hostname} \ -V '/=2G;;;ro,noatime,discard' \ -V '/var/log=512M;;;noatime,discard' \ -V '/home=12M;;;noatime,discard' \ -V '/var=;;;noatime' \ -S ${vmsetup} printf 'Converting %s to %s\n' "${name}".img "${name}".qcow2 qemu-img convert -p -O qcow2 "${pooldir}/${name}".{img,qcow2} rm -f ${pooldir}/${name}.img || : virsh pool-refresh ${POOL} virt-install \ --name ${name} \ --memory 1024 \ --vcpus 2 \ --cpu host \ --import \ --os-variant fedora23 \ --boot kernel=${KERNEL},initrd=${INITRD},kernel_args=${KCMDLINE} \ --disk vol=${POOL}/${name}.qcow2 \ --network bridge=${BRIDGE},model=virtio \ --sound none \ --redirdev none \ --noautoconsole ansible -i /dev/null localhost -mwait_for -a "host=${hostname} port=22" exec ssh \ -o StrictHostKeyChecking=no \ -o UserKnownHostsFile=/dev/null \ root@${hostname}