104 lines
2.7 KiB
Bash
Executable File
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}
|