107 lines
2.6 KiB
Bash
107 lines
2.6 KiB
Bash
#!/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}"
|