scripts/g2testvm.sh

104 lines
2.7 KiB
Bash
Executable File

#!/bin/zsh
name=${NAME:-${PREFIX:-Test-}$(uuidgen | cut -c -6)}
hostname=${name:l}
: ${STAGEDIR:=/mnt/downloads/Gentoo/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} <<EOF
#!/bin/sh -ex
if [ -x /usr/lib/systemd/systemd ]; then
cat > /etc/systemd/network/90-dhcp.network <<-'EOF'
[Match]
Name=en*
[Network]
DHCP=yes
EOF
systemctl enable systemd-networkd systemd-resolved sshd
timedatectl set-timezone America/Chicago
hostnamectl set-hostname ${hostname}
ln -snf /run/systemd/resolve/resolv.conf /etc/resolv.conf
else
ln -s net.lo /etc/init.d/net.eth0
ln -s /etc/init.d/net.eth0 /etc/runlevels/default/
ln -s /etc/init.d/sshd /etc/runlevels/default/
echo 'config_eth0="dhcp"' > /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
ln -snf /run/resolv.conf /etc/resolv.conf
ln -snf /run/ntp.conf /etc/ntp.conf
fi
ssh-keygen -A
ln -snf /proc/self/mounts /etc/mtab
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}"
gentoo-img "${stagetbz}" "${pooldir}/${name}.img" \
-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 rhel7 \
--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}