#!/usr/bin/env bash set -eo pipefail if [ $# -lt 1 ]; then echo "ERROR: Specify config path" exit 1 fi CONFIG_PATH="${1}" if [ ! -f "${CONFIG_PATH}/act-runner.bu" ]; then echo "ERROR: Config path ${CONFIG_PATH} must include the act-runner.bu file" exit 1 fi NAME="${HOSTNAME}-act-runner" STREAM="stable" BUTANE_CONFIG="${CONFIG_PATH}/act-runner.bu" VCPUS="8" RAM_MB="16132" DISK_GB="100" SSH_KEY="${HOME}/.ssh/_${HOSTNAME}_act_runner_ed25519" IGNITION_PATH="${CONFIG_PATH}/${NAME}.ign" IMAGE_PATH="${CONFIG_PATH}/${NAME}.qcow2" DOWNLOAD_PATH="$(mktemp -d)" KVM="qemu:///session" if ! systemctl is-active libvirtd --quiet; then systemctl start libvirtd fi all_vms=$(virsh --connect="${KVM}" list --all) if [[ $all_vms == *"${NAME}"* ]]; then running_vms=$(virsh --connect="$KVM" list) if [[ $running_vms == *"${NAME}"* ]]; then echo "Shutting down VM ${NAME}..." virsh --connect="${KVM}" destroy "${NAME}" fi echo "Destroying VM ${NAME}..." virsh --connect="${KVM}" undefine --domain="${NAME}" --remove-all-storage --managed-save echo "Deleting image ${IMAGE_PATH}..." rm -rf "${IMAGE_PATH}" echo "Deleting ignition file ${IGNITION_PATH}..." rm "${IGNITION_PATH}" fi podman run \ --rm \ -v "${DOWNLOAD_PATH}:/data:z" \ -w /data \ quay.io/coreos/coreos-installer:release \ download -s "${STREAM}" -p qemu -f qcow2.xz --decompress download_image=$(command ls "${DOWNLOAD_PATH}"/*.qcow2) mv "${download_image}" "${IMAGE_PATH}" echo "${HOSTNAME}-act-runner" >"${CONFIG_PATH}/hostname" if [ ! -f "${SSH_KEY}" ]; then ssh-keygen -q -f "${SSH_KEY}" -t ed25519 -C "${USERNAME}@${HOSTNAME}-act-runner" -N '' fi cp "${SSH_KEY}.pub" "${CONFIG_PATH}/core_ssh_keys.pub" mkdir --parents "${CONFIG_PATH}/host_keys" key_formats=( "rsa" "ed25519" "ecdsa" ) for key in "${key_formats[@]}"; do if [ ! -f "${CONFIG_PATH}/host_keys/ssh_${key}" ]; then ssh-keygen -q \ -f "${CONFIG_PATH}/host_keys/ssh_${key}" \ -t "${key}" \ -C "${HOSTNAME}-act-runner" \ -N '' fi done podman run \ --interactive \ --rm \ -v "${CONFIG_PATH}:/data:z" \ quay.io/coreos/butane:release \ --pretty --strict --files-dir=/data < "${BUTANE_CONFIG}" > "${IGNITION_PATH}" chcon --verbose --type svirt_home_t "${IGNITION_PATH}" virt-install \ --connect="${KVM}" \ --name="${NAME}" \ --vcpus="${VCPUS}" \ --memory="${RAM_MB}" \ --os-variant="fedora-coreos-${STREAM}" \ --import \ --noautoconsole \ --graphics=none \ --disk="size=${DISK_GB},backing_store=${IMAGE_PATH}" \ --network bridge=virbr0 \ --qemu-commandline="-fw_cfg name=opt/com.coreos/config,file=${IGNITION_PATH}"