Files
toolbox-dev-env/act-runner/rebuild.bash

108 lines
2.6 KiB
Bash

#!/usr/bin/env bash
set -e
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"
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
download_dir=$(mktemp -d)
podman run \
--rm \
-v "${download_dir}:/data:z" \
-w /data \
quay.io/coreos/coreos-installer:release \
download -s "${STREAM}" -p qemu -f qcow2.xz --decompress
download_image=$(command ls "${download_dir}"/*.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}"