#!/bin/bash BASE_IMAGE="$1" GOLDEN_IMAGE="$2" SSH_PUB_KEY="${3:-$HOME/.ssh/id_rsa.pub}" if [ -z "$BASE_IMAGE" ] || [ -z "$GOLDEN_IMAGE" ]; then echo "Usage: $0 [ssh_pub_key]" exit 1 fi echo "Creating golden image: $GOLDEN_IMAGE" cp "$BASE_IMAGE" "$GOLDEN_IMAGE" export LIBGUESTFS_BACKEND=direct sudo virt-customize -a "$GOLDEN_IMAGE" \ --install rakudo,rakudo-zef,perl,git,openssh-server \ --run-command 'useradd -m rocky && echo "rocky:rockypass" | chpasswd' \ --run-command 'echo "rocky ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/rocky && chmod 0440 /etc/sudoers.d/rocky' \ --ssh-inject root:file:"$SSH_PUB_KEY" \ --ssh-inject rocky:file:"$SSH_PUB_KEY" \ --root-password password:rockytesting \ --run-command 'systemctl enable sshd' \ --selinux-relabel echo "Bootstrapping Sparrowdo..." BOOTSTRAP_VM="bootstrap-$$" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" VM_IP=$("$SCRIPT_DIR/provision_vm.sh" "$BOOTSTRAP_VM" "$GOLDEN_IMAGE" 60 | tail -1) if [ -z "$VM_IP" ] || [ "$VM_IP" = "ERROR" ]; then echo "ERROR: Failed to provision bootstrap VM" exit 1 fi sleep 5 SSH_KEY="${SSH_PUB_KEY%.pub}" sparrowdo --host="$VM_IP" --ssh_user=rocky --ssh_private_key="$SSH_KEY" \ --ssh_args="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" \ --bootstrap --color ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ rocky@"$VM_IP" 'sudo shutdown -h now' 2>/dev/null || true sleep 10 "$SCRIPT_DIR/cleanup_vm.sh" "$BOOTSTRAP_VM" echo "Golden image ready: $GOLDEN_IMAGE"